0
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        while(!weakSelf.isAnotherThreadCompleted && [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]])
            ;
         [weakSelf doSomething];

    });

以这种方式让异步线程等待另一个线程是否正确?

4

1 回答 1

1

您将停止对应的全局队列DISPATCH_QUEUE_PRIORITY_DEFAULT。如果您将其他内容发送到此队列,则在您完成等待之前它不会执行。

另外,我认为该调度队列对应的线程中不会存在运行循环,因此您将通过调用创建一个运行循环- currentRunLoop,由于不会附加任何源,它会立即返回值NO(或者,会有一个随机的运行循环,并且行为将完全不可预测)。

为什么不在工作线程的末尾调用一个块?或者只使用一种机制(GCD、NSOperation、线程、运行循环)和与之相伴的同步,而不是混合它们?

于 2013-03-21T12:07:03.910 回答