NSRunLoop только для запуска до тех пор, пока не будут завершены все события

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

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

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


person coder000001    schedule 15.02.2012    source источник


Ответы (1)


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

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

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

person rob mayoff    schedule 15.02.2012