NSRunLoop和CFRunLoop中有方法,运行到特定时间 CFRunLoopInMode和NSRunLoop - runUntillDateT
这些方法指定运行的时间。
但是,我想在runLoop中处理所有消息,如果完成并且空闲则退出。 因为某些runLoop源可以无限期地处理。所以,我不能提及时间。
答案 0 :(得分:5)
您可以使用CFRunLoopRunInMode
运行事件循环一次,并告诉您它是否处理了任何来源。所以你可以尝试这样的事情:
while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, 1) == kCFRunLoopRunHandledSource) {
// nothing
}
您可以尝试的另一种方法是使用CFRunLoopObserver
activities
参数创建kCFRunLoopBeforeWaiting
。在运行循环进入休眠状态之前,将调用此观察器,等待源或计时器触发。在观察者的标注中,您只需拨打CFRunLoopStop(CFRunLoopGetCurrent())
。