代码之家  ›  专栏  ›  技术社区  ›  Olie

如何暂停一个nsthread直到通知?

  •  15
  • Olie  · 技术社区  · 16 年前

    我有一个工作线程,我想执行它的一点任务,然后暂停并等待另一个线程发出的“确定,继续”命令,然后暂停并等待,等等。

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

    在我的工人身上,我有一个相当丑陋和粗暴的东西:

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

    …但我忍不住想一定有更好的办法,可能涉及到nslocks,或者其他类似的方法。

    评论,提示,建议?

    谢谢!

    1 回复  |  直到 16 年前
        1
  •  25
  •   nall    16 年前

    观察 NSCondition 以及 Conditions 穿线指南中的部分。代码将类似于:

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