如何避免在FSEventStream回调中接收旧事件(macOS上的FSEvents框架)

时间:2017-12-06 16:40:45

标签: macos fsevents

我遇到了macOS框架FSEvents的问题:当我打电话给FSEventStreamCreate并将kFSEventStreamEventIdSinceNow传递给"因为"参数,我仍然会收到kFSEventStreamEventFlagItemCreated个事件,这些事件是在创建和安排流之前几秒钟生成的文件。

NSArray* paths = createDummyFilesOnFileSystem();
sleepForFiveSeconds();

CFRunLoopRef runLoop = ...;
FSEventStreamContext context = ...;
CFTimeInterval latency = 0.5;
FSEventStreamCreateFlags streamCreateFlags =
   kFSEventStreamCreateFlagUseCFTypes |
   kFSEventStreamCreateFlagNoDefer |
   kFSEventStreamCreateFlagWatchRoot |
   kFSEventStreamCreateFlagFileEvents;
FSEventStreamRef stream = FSEventStreamCreate(NULL,
   &fsEventCallback,
   &context,
   (__bridge CFArrayRef) paths,
   kFSEventStreamEventIdSinceNow,
   latency,
   streamCreateFlags);
FSEventStreamScheduleWithRunLoop(stream, runLoop, kCFRunLoopDefaultMode);
FSEventStreamStart(stream);

我有什么办法可以避免收到先前创建的文件的kFSEventStreamEventFlagItemCreated通知,或者我可以通过任何方式过滤这些文件(例如通过查看其他标志)?我已经尝试过最初刷新流并将FSEventsGetCurrentEventId()传递给since参数,但这也无济于事。

谢谢!

0 个答案:

没有答案