Я занимаюсь разработкой библиотеки 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-версию, которая не работала.
Решение было использовать FSEventStreamFlushSync
который вызывает обратные вызовы без контекста GLFW.