gpt4 book ai didi

ios - 当 NSThread 休眠时退出它?

转载 作者:行者123 更新时间:2023-11-29 04:24:37 24 4
gpt4 key购买 nike

我正在创建一个新线程,它运行我的方法之一:现在我正在做的事情如下:

NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(myThreadFunc) object:nil];
[thread start];

在 myThreadFunc 中

{
while(isRunning){
[self updateSomething];
[NSThread sleepForTimeInterval:3.0];
}
NSLog(@"out");
}

在另一个函数中,我设置了 isRunning = NOthread = nil[thread cancel]myThreadFunc > 正在休眠,因此线程无法退出。我怎样才能控制这种情况?非常感谢。

最佳答案

不要使用线程。使用计时器。如果某事很昂贵,请将其分派(dispatch)到主队列以外的某个队列,并设置一些状态变量以显示它仍在运行(如果某事并不意味着同时运行)。然后,取消计时器即可。定时器回调函数的一个简单示例可能是:

- (void)doSomething:(NSTimer*)timer
{
// this assumes that this "something" only ever
// runs once at a time no matter what, adjust this
// to an ivar if it's per-class instance or something
static BOOL alreadyDoingSomething = NO;
if( alreadyDoingSomething ) return;
alreadyDoingSomething = YES;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self updateSomething];
alreadyDoingSomething = NO;
});
}

现在,如果您只是取消计时器,它将停止运行。当您准备好再次启动它时,请使用此方法作为指定选择器安排一个新计时器。为了使其行为与上面的示例类似,您可以将计时器间隔设置为三秒。

关于ios - 当 NSThread 休眠时退出它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12506151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com