如何暂停NSThread直到通知?

问题描述:

我有我想要做的任务之一位工作线程,然后暂停&等待另一个线程的“OK,继续”命令,然后暂停&等待,等如何暂停NSThread直到通知?

的使用情况是:控制对象是一个视图,我希望显示有关工作线程内部正在发生的事情的信息,并允许我通过工作人员“单步执行”,因为它是事物。

,我有我的工人的相当丑陋和笨拙的事情是这样的:

NSLog(@"paused"); 
paused = YES; 

while (paused) 
{ 
    [NSThread sleepForTimeInterval:0.25]; 
} 
NSLog(@".. continuing"); 

...但我不禁觉得必须有一个更好的方式,可能涉及NSLocks ,或者其他一些。

评论,提示建议?

谢谢!

查看线程指南中的NSConditionConditions部分。代码将如下所示:

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]; 
+0

正是我所需要的。谢谢。 – Olie 2009-10-15 01:04:22

+2

另外请注意,对于未来的spelunkers:'NSConditionLock',你在那里做''condition lockWhenCondition:suppliesAvailable]; mySupplies = [供应问题内容]; [supplyQueue removeAllSupplies]; [condition unlockWithCondition:noSuppliesAvailable]; //根据需要花费我的用品是一种非常有用的模式。在我的情况下,而不是partySupplies,我把它作为需要处理的数据。 QED。 – Olie 2014-05-27 20:18:54

+0

+1开始派对。 :D大量使用partySuppliesAvailable和//派对! – Alexandru 2014-06-16 00:45:45