15

我有一个工作线程,我想做它的一部分任务,然后暂停并等待来自另一个线程的“ok,继续”命令,然后暂停并等待,等等。

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

我的工人中相当丑陋和笨拙的事情是:

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

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

...但我不禁认为一定有更好的方法,可能涉及 NSLocks,或类似的。

评论,提示建议?

谢谢!

4

1 回答 1

26

查看线程指南中的NSCondition条件部分。代码将类似于:

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];
于 2009-10-12T23:24:14.363 回答