如何暂停 NSThread 直到收到通知?

问题描述 投票:0回答:1

我有一个工作线程,我想要执行其任务的一部分,然后暂停并等待来自另一个线程的“确定,继续”命令,然后暂停并等待,等等。

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

我的工人身上相当丑陋和粗暴的东西是这样的:

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

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

...但我忍不住认为一定有更好的方法,也许涉及 NSLocks,或者类似的方法。

评论、提示建议?

谢谢!

cocoa nsthread
1个回答
27
投票

查看线程指南中的 NSConditionConditions 部分。代码看起来像这样:

NSCondition* condition; // initialize and release this as 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];
© www.soinside.com 2019 - 2024. All rights reserved.