从C ++轮询FSEvents

时间:2014-10-15 22:26:48

标签: c++ objective-c fsevents

我正在开发一个C ++库,我们有一个用于文件系统处理的模块,特别是用于文件更改的回调。我已经实现了fsevent回调(如https://developer.apple.com/library/mac/documentation/Darwin/Reference/FSEvents_Ref/Reference/reference.htmlFSEvents C++ Example中所述)。

问题是我没有得到任何回调,除非我在阻塞主线程的CFRunLoopRun()之后调用FSEventStreamStart(stream)。如果我在没有CFRunLoopRun()的GLFW上下文中使用相同的代码,我会得到回调,一切正常(非阻塞)。

我已经完成了很多GLFW代码并实现了GLFW在其glfwPollEvents()函数中执行的Objective-C NSEvent轮询,不幸的是,每次调用它时事件都是nil并且没有调用回调。

来自cocoa_window.m的GLFW片段:

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

    [NSApp sendEvent:event];
}

有关如何获取回调的任何想法(即使我必须轮询它们)而不必运行GLFW上下文?

更新

我想要异步获取回调,但我发现FSEventStreamFlushSync强制回调(如果有的话)被调用(并且它可以工作!)。我先尝试过Async版本但没有用。

1 个答案:

答案 0 :(得分:1)

解决方案是使用FSEventStreamFlushSync强制回调而不使用GLFW上下文。