【问题标题】:NSRunLoop only to run untill all the events are finishedNSRunLoop 只运行直到所有事件都完成
【发布时间】:2012-02-15 08:17:01
【问题描述】:

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

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

但是,我想处理 runLoop 中的所有消息,如果它完成并且空闲则退出。 因为一些 runLoop 源可以有无限的时间来处理。所以,我不能说时间。

【问题讨论】:

    标签: objective-c macos nsrunloop


    【解决方案1】:

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

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

    您可以尝试的另一种方法是使用activities 参数为kCFRunLoopBeforeWaiting 创建CFRunLoopObserver。这个观察者将在运行循环进入睡眠等待源或计时器触发之前被调用。在观察者的标注中,您可以简单地调用CFRunLoopStop(CFRunLoopGetCurrent())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 2021-02-18
      • 2015-06-10
      • 1970-01-01
      相关资源
      最近更新 更多