NSRunLoop только для запуска до завершения всех событий - PullRequest
1 голос
/ 15 февраля 2012

Есть методы в NSRunLoop и CFRunLoop, для запуска к определенному времени CFRunLoopInMode и NSRunLoop - runUntillDateT

Эти методы указывают время для запуска до.

Но я хотел обработать все сообщенияв runLoop и выйдите, если это сделано и простаивает.Потому что некоторые из источников runLoop могут иметь неопределенное время для обработки.Так что я не могу упомянуть время.

1 Ответ

5 голосов
/ 15 февраля 2012

Вы можете использовать CFRunLoopRunInMode для запуска цикла событий за один проход, и он сообщает вам, обрабатывал ли он какие-либо источники. Таким образом, вы можете попробовать что-то вроде этого:

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

Другой подход, который вы можете попробовать, - это создать CFRunLoopObserver с аргументом activities, равным kCFRunLoopBeforeWaiting. Этот наблюдатель будет вызван непосредственно перед тем, как цикл выполнения перейдет в спящий режим в ожидании срабатывания источника или таймера. В вызове наблюдателя вы можете просто позвонить CFRunLoopStop(CFRunLoopGetCurrent()).

...