我有一个工作线程,我想要执行其任务的一部分,然后暂停并等待来自另一个线程的“确定,继续”命令,然后暂停并等待,等等。
用例是:控制对象是一个视图,我想显示有关工作线程内部发生的事情的信息,并允许我“单步”通过工作线程,因为它是它的事情。
我的工人身上相当丑陋和粗暴的东西是这样的:
NSLog(@"paused");
paused = YES;
while (paused)
{
[NSThread sleepForTimeInterval:0.25];
}
NSLog(@".. continuing");
...但我忍不住认为一定有更好的方法,也许涉及 NSLocks,或者类似的方法。
评论、提示建议?
谢谢!
查看线程指南中的 NSCondition 和 Conditions 部分。代码看起来像这样:
NSCondition* condition; // initialize and release this as your app requires.
//Worker thread:
while([NSThread currentThread] isCancelled] == NO)
{
[condition lock];
while(partySuppliesAvailable == NO)
{
[condition wait];
}
// party!
partySuppliesAvailable = NO;
[condition unlock];
}
//Main thread:
[condition lock];
// Get party supplies
partySuppliesAvailable = YES;
[condition signal];
[condition unlock];