如何暂停NSThread直到通知?
问题描述:
我有我想要做的任务之一位工作线程,然后暂停&等待另一个线程的“OK,继续”命令,然后暂停&等待,等如何暂停NSThread直到通知?
的使用情况是:控制对象是一个视图,我希望显示有关工作线程内部正在发生的事情的信息,并允许我通过工作人员“单步执行”,因为它是事物。
,我有我的工人的相当丑陋和笨拙的事情是这样的:
NSLog(@"paused");
paused = YES;
while (paused)
{
[NSThread sleepForTimeInterval:0.25];
}
NSLog(@".. continuing");
...但我不禁觉得必须有一个更好的方式,可能涉及NSLocks ,或者其他一些。
评论,提示建议?
谢谢!
答
查看线程指南中的NSCondition和Conditions部分。代码将如下所示:
NSCondition* condition; // initialize and release this is 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];
正是我所需要的。谢谢。 – Olie 2009-10-15 01:04:22
另外请注意,对于未来的spelunkers:'NSConditionLock',你在那里做''condition lockWhenCondition:suppliesAvailable]; mySupplies = [供应问题内容]; [supplyQueue removeAllSupplies]; [condition unlockWithCondition:noSuppliesAvailable]; //根据需要花费我的用品是一种非常有用的模式。在我的情况下,而不是partySupplies,我把它作为需要处理的数据。 QED。 – Olie 2014-05-27 20:18:54
+1开始派对。 :D大量使用partySuppliesAvailable和//派对! – Alexandru 2014-06-16 00:45:45