цель c — опрос для FSEvents из переполнения стека

Я занимаюсь разработкой библиотеки C ++, где у нас есть модуль для обработки файловой системы и, в частности, обратные вызовы для изменения файлов. Я реализовал обратный вызов fsevent (как описано в https://developer.apple.com/library/mac/documentation/Darwin/Reference/FSEvents_Ref/Reference/reference.html а также Пример FSEvents C ++).

Проблема в том, что я не получаю никаких обратных вызовов, пока я не позвоню CFRunLoopRun() после FSEventStreamStart(stream) который блокирует основной поток. Если я использую тот же код в контексте GLFW без CFRunLoopRun() Я получаю обратные вызовы, и все работает нормально (без блокировки).

Я прошел много кода GLFW и реализовал опрос Obse-C NSEvent, который GLFW делает в своем glfwPollEvents() функция, к сожалению, событие равно нулю каждый раз, когда оно вызывается, и никакие обратные вызовы не вызываются.

Фрагмент GLFW от cocoa_window.m:

for (;;)
{
NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate distantPast]
inMode:NSDefaultRunLoopMode
dequeue:YES];
if (event == nil)
break;

[NSApp sendEvent:event];
}

Любые идеи о том, как получить обратные вызовы (даже если я должен опрашивать их) без необходимости запуска контекст GLFW?

Обновить:

Я хотел бы получить обратные вызовы асинхронно, но я нашел FSEventStreamFlushSync это заставляет обратный вызов (если есть) вызываться (и это работает!). Сначала я попробовал Async-версию, которая не работала.

0

Решение

Решение было использовать FSEventStreamFlushSync который вызывает обратные вызовы без контекста GLFW.

1

Другие решения


По вопросам рекламы [email protected]