Опрос для FSEvents от C ++

0

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

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

Я прошел через много кода GLFW и внедрил опрос Objective-C NSEvent, который GLFW делает в своей функции glfwPollEvents(), к сожалению, событие 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
    ну, вам нужен какой-нибудь runloop, чтобы это работало. почему вы не можете присоединить его к основному циклу выполнения? использовать FSEventStreamScheduleWithRunLoop для планирования CFRunLoopGetCurrent . все это в теме, которую вы связали.
  • 0
    извините, я имел в виду CFRunLoopGetMain .
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню