1

NSRunLoopとCFRunLoopにはメソッドがあり、特定の時間に実行するにはCFRunLoopInModeとNSRunLoop --runUntillDateT

これらのメソッドは、まで実行する時間を指定します。

しかし、runLoop内のすべてのメッセージを処理し、それが完了してアイドル状態になったら終了したかったのです。一部のrunLoopソースは、処理に無期限の時間がかかる可能性があるためです。ですから、時間については言えません。

4

1 に答える 1

5

を使用CFRunLoopRunInModeして 1 つのパスのイベント ループを実行すると、ソースを処理したかどうかがわかります。したがって、次のようなことを試すことができます。

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

試すことができる別のアプローチはCFRunLoopObserver、 のactivities引数でを作成することですkCFRunLoopBeforeWaiting。このオブザーバーは、ソースまたはタイマーが起動するのを待って実行ループがスリープ状態になる直前に呼び出されます。オブザーバーの吹き出しでは、単に を呼び出すことができますCFRunLoopStop(CFRunLoopGetCurrent())

于 2012-02-15T08:29:34.647 に答える