如何通知暂停NSThread?

Oli*_*lie 15 cocoa nsthread

我有一个工作线程,我想做一点任务,然后暂停并等待来自另一个线程的"ok,continue"命令,然后暂停和等待等.

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

我工作中相当丑陋和沉重的事情是:

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

while (paused)
{
    [NSThread sleepForTimeInterval:0.25];
}
NSLog(@".. continuing");
Run Code Online (Sandbox Code Playgroud)

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

评论,提示建议?

谢谢!

nal*_*all 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];
Run Code Online (Sandbox Code Playgroud)

  • 还要注意,对于未来的探险者:`NSConditionLock`,你做的事情就像`[condition lockWhenCondition:suppliesAvailable]; mySupplies = [supplyQueue contents]; [supplyQueue removeAllSupplies]; [condition unlockWithCondition:noSuppliesAvailable]; //根据需要花费mySupplies`是一个非常有用的模式.在我的情况下,我把它作为需要处理的数据,而不是partySupplies.QED. (2认同)