CFRunLoopAddSource: режим запуска для немедленного выполнения

Я пытаюсь добавить наблюдателя в активное окно (может быть любая программа, не только моя), чтобы оно сообщало мне, если оно движется. Вот как я добавил наблюдателя в цикл выполнения:

AXObserverAddNotification(m_observer, (AXUIElementRef)activeWindow, kAXMovedNotification, (__bridge void*)self);
CFRunLoopAddSource( [[NSRunLoop currentRunLoop] getCFRunLoop], AXObserverGetRunLoopSource(m_observer),kCFRunLoopDefaultMode );

Обратный вызов, связанный с наблюдателем, в настоящий момент просто печатает что-то в окне вывода. Я наблюдаю, что ничего не выводится, когда я перетаскиваю активное окно (опять же, это может быть окно любого приложения), но как только я останавливаюсь, выводятся кратные результаты printf. Похоже, что вызовы обратного вызова ставятся в очередь, пока не будет некоторого времени простоя, чтобы выполнить все сразу.

Есть ли способ выполнить обратный вызов, не ожидая простоя? Может быть, CFRunLoopMode, который бы это сделал?

0 ответов

Другие вопросы по тегам