我正在开发一个C ++库,我们有一个用于文件系统处理的模块,特别是用于文件更改的回调。我已经实现了fsevent回调(如https://developer.apple.com/library/mac/documentation/Darwin/Reference/FSEvents_Ref/Reference/reference.html和FSEvents 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版本但没有用。
答案 0 :(得分:1)
解决方案是使用FSEventStreamFlushSync
强制回调而不使用GLFW上下文。