如何通知暂停NSThread?

时间:2009-10-12 21:35:16

标签: cocoa nsthread

我有一个工作线程,我想做一点任务,然后暂停&等待来自另一个线程的“ok,continue”命令,然后暂停&等等等。

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

我工作中相当丑陋和笨拙的事情就是这样:

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

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

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

评论,提示建议?

谢谢!

1 个答案:

答案 0 :(得分:26)

查看“线程指南”中的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];