NSRunLoop只运行直到所有事件都完成

时间:2012-02-15 08:17:01

标签: objective-c macos nsrunloop

NSRunLoop和CFRunLoop中有方法,运行到特定时间 CFRunLoopInMode和NSRunLoop - runUntillDateT

这些方法指定运行的时间。

但是,我想在runLoop中处理所有消息,如果完成并且空闲则退出。 因为某些runLoop源可以无限期地处理。所以,我不能提及时间。

1 个答案:

答案 0 :(得分:5)

您可以使用CFRunLoopRunInMode运行事件循环一次,并告诉您它是否处理了任何来源。所以你可以尝试这样的事情:

while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, 1) == kCFRunLoopRunHandledSource) {
    // nothing
}

您可以尝试的另一种方法是使用CFRunLoopObserver activities参数创建kCFRunLoopBeforeWaiting。在运行循环进入休眠状态之前,将调用此观察器,等待源或计时器触发。在观察者的标注中,您只需拨打CFRunLoopStop(CFRunLoopGetCurrent())

即可