我试图了解如何将 kFSEventStreamEventFlagEventIdsWrapped
事件标志与 FSEvents
结合使用。
根据文档,当事件 ID 计数器回绕时,该标志会发送到已注册的实例,从而使先前的事件 ID 过时。
现在让我们想象以下场景:
- 我在应用程序中注册了
FSEvents
; - 处理完
FSEvents
后(例如,我的应用程序退出),我会保存处理事件时遇到的最后一个事件 ID,以便能够重播该 ID 的更改; - 当我的应用程序未运行时,事件 ID 计数器会回绕。
我的问题是:我怎么知道柜台已经被绕好? (因此需要我重新扫描整个目录结构。)
最佳答案
我现在直接从 Apple 得到了答案。
这个场景一开始就是错误的。保存最后处理的事件 ID 时,还必须保存事件流的 UUID。事件 ID 仅对给定事件流有效,该事件流由其 UUID 标识(请参阅FSEventsCopyUUIDForDevice()
)。
每当事件 ID 计数器回绕时,就会生成一个新的事件流 UUID。因此,如果您在事件 ID 计数器结束后重新启动应用程序,您存储的最后一个事件 ID 将不再有效,并且您会知道,因为事件流 UUID 不会相同.
如果您遇到 kFSEventStreamEventFlagEventIdsWrapped
标志,则意味着计数器在您的应用程序打开时回绕。然而,没有什么特别要做的。如果您想保存最后一个事件 ID,您应该确保获取新的事件流 UUID。
关于macos - 如何将 kFSEventStreamEventFlagEventIdsWrapped 与 FSEvents 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19840874/