我需要同步我在 iOS 应用程序中获得的一些后台线程。我需要一些东西来保持一个线程的执行,而另一个线程完成它的工作,以保持代码的线性执行。
我整天都在与这段代码作斗争,经过大量阅读后,我想出了这段代码:
-(void)waitOne:(double)timeout
{
if (!shouldRun)
{
shouldRun = true;
double runs = 0;
do {
NSDate* next = [NSDate dateWithTimeIntervalSinceNow:0.5];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:next];
runs++;
} while ((runs/2) < timeout && shouldRun);
}
else
{
@throw [NSException exceptionWithName:@"InvalidHandle" reason:@"The currenct handle is in use" userInfo:nil];
}
}
我可以告诉你,它完成了工作。但我也在论坛上发现了一些不好的反馈,在那里我找到了该算法的想法,说“它会让你的循环忙于等待”,这是一个坏主意。所以,我来这里问问。有没有更好的方法来完成我想要的?