模拟文件更改监视器(FAM)事件

问题描述:

我想模拟FAM事件。该API似乎不支持这一点。 为什么?因为我有一个线程正在等待FAMNextEvent(),我想从另一个线程中唤醒它。 我想我可以触摸其中一个被监控的文件,但看起来很粗糙。模拟文件更改监视器(FAM)事件

而不是使用FAMNextEvent直接,关于

  • FAMCONNECTION_GETFD(FAMConnection)
    触发时使用selectpoll如何,呼吁FAMNextEvent之前检查FAMPending
  • 一个self-pipe

线程将等待或者是FAM事件写入到自管字节。

+0

谢谢!好想法。我不知道FAM在底层使用select。但是有道理。环顾四周,我读了pselect()让一个自我管道过时了。但我更喜欢在自管道上写一个字节来发送信号。 –

+0

@mikejones在多线程程序中处理信号是非常棘手的。用'signalfd'或避免信号会更好。 – ephemient

+0

我花了相当长的时间才完成这项工作。我发现,当它出现在select()中时,我称之为FAMPending()。待定会报告没有事件,但如果我回到等待select()它永远等待。所以我放弃了FAMPending()并且直接去了FAMNextEvent()。然后我又有一个bug ......它没有得到所有的事件。解决方案是在FAMNextEvent()之后检查未决事件,当然,如果有任何事件返回到FAMNextEvent。 –