使用 DispatchQueue 管理由 pdflatex 生成的同一文件更改的多个事件



我目前正在使用DispatchQueue和DispatchSourceFileSystemObject来跟踪由pdflatex生成的pdf文件上的文件更改。我遇到的问题是,当pdflatex生成pdf时,它会发送几个".write"事件,而不仅仅是一个。处理程序的工作是更新显示 pdf 的相应视图,我想避免以基本相同的更改更新视图几次(每次收到特定标志的事件时都会调用处理程序)。我只想调用处理程序一次,并且当同一pdf生成的最后一个".write"事件发生时。例如,如果 pdflatex 生成 10 个".write"事件,则只有在收到第十个事件时才应调用处理程序。

我尝试:

  • 用标志检查收到的当前事件以忽略具有相同标志的未来事件,然后休眠几秒钟以等待我收到所有".write"事件,但这不是解决方案,因为取决于要生成的 pdf 文件可能需要不同的时间才能完成 PDFLATEX 的过程。

  • 获取文件的修改日期,但是对于几个".write",有时
  • 每个".write"的日期都是相同的,有时它会更改 1 秒等,因此使用 Date 作为调用处理程序的一种方式不是一个好主意。

我正在使用串行队列,因此操作不在同一队列中并发。如果可能的话,我想继续使用 DisaptchQueue,并且只有在没有解决方案的情况下,我也希望使用 OperationQueue 和 Operation 或 BlockOperation 进行可能的实现。

我以这种方式解决了这个问题:每次我收到".write"事件时,我都会尝试使用他的网址构建一个pdfDocument,如果文档为零,则意味着pdflatex进程仍在发送".write"事件。在最后一个".write"事件中,我可以成功获得pdfDocument,因为文档已经完成。

最新更新