Каково определение «с этого момента» для FSEventStreamCreate

#c #macos #fsevents

#c #macos #fsevents

Вопрос:

Это может показаться странным вопросом, но я хочу быть уверен, что я правильно понял это. В руководстве fsevents по FSEventStreamCreate():

Создает новый объект потока событий FS с заданными параметрами. Чтобы начать получать обратные вызовы, вы также должны вызвать FSEventStreamScheduleWithRunLoop() и FSEventStreamStart().

sinceWhen: Служба будет предоставлять события, которые произошли после заданного идентификатора события. Чтобы запросить события «с этого момента», передайте константу kFSEventStreamEventIdSinceNow. Часто клиенты предоставляют идентификатор FSEventStreamEventId с наибольшим номером, полученный ими при обратном вызове, который они могут получить с помощью средства доступа FSEventStreamGetLatestEventId(). Не передавайте ноль для sinceWhen, если вы не хотите получать события для каждого каталога, измененного с «начала времен» — маловероятный сценарий. …

Означает ли «с этого момента» из FSEventStreamCreate или из вызова FSEventStreamStart?


На высоком уровне я хочу зарегистрировать поток, а затем запустить процесс, который будет изменять файл с очень редкими интервалами. Монитор не должен пропустить изменение между началом обработки файла и началом потока, иначе до следующего изменения могут пройти минуты или часы.

Итак, у меня есть два потока:

  • вызовите FSEventStreamCreate()
  • запустите отдельный поток, который будет:
    • вызовите FSEventStreamScheduleWithRunLoop()
    • вызовите FSEventStreamStart()
    • вызовите CFRunLoopRun()
  • начать обработку файла

В зависимости от интерпретации, эта потоковая модель может быть совершенно безопасной или иметь состояние гонки, когда поток начинается с вызова FSEventStreamStart() и происходит после запуска обработки файла.