#c #macos #fsevents
#c #macos #fsevents
Вопрос:
Это может показаться странным вопросом, но я хочу быть уверен, что я правильно понял это. В руководстве fsevents по FSEventStreamCreate():
Создает новый объект потока событий FS с заданными параметрами. Чтобы начать получать обратные вызовы, вы также должны вызвать FSEventStreamScheduleWithRunLoop() и FSEventStreamStart().
…
sinceWhen: Служба будет предоставлять события, которые произошли после заданного идентификатора события. Чтобы запросить события «с этого момента», передайте константу kFSEventStreamEventIdSinceNow. Часто клиенты предоставляют идентификатор FSEventStreamEventId с наибольшим номером, полученный ими при обратном вызове, который они могут получить с помощью средства доступа FSEventStreamGetLatestEventId(). Не передавайте ноль для sinceWhen, если вы не хотите получать события для каждого каталога, измененного с «начала времен» — маловероятный сценарий. …
Означает ли «с этого момента» из FSEventStreamCreate или из вызова FSEventStreamStart?
На высоком уровне я хочу зарегистрировать поток, а затем запустить процесс, который будет изменять файл с очень редкими интервалами. Монитор не должен пропустить изменение между началом обработки файла и началом потока, иначе до следующего изменения могут пройти минуты или часы.
Итак, у меня есть два потока:
- вызовите FSEventStreamCreate()
- запустите отдельный поток, который будет:
- вызовите FSEventStreamScheduleWithRunLoop()
- вызовите FSEventStreamStart()
- вызовите CFRunLoopRun()
- начать обработку файла
В зависимости от интерпретации, эта потоковая модель может быть совершенно безопасной или иметь состояние гонки, когда поток начинается с вызова FSEventStreamStart() и происходит после запуска обработки файла.