2011-11-23 83 views
0

我想模擬FAM事件。該API似乎不支持這一點。 爲什麼?因爲我有一個線程正在等待FAMNextEvent(),我想從另一個線程中喚醒它。 我想我可以觸摸其中一個被監控的文件,但看起來很粗糙。模擬文件更改監視器(FAM)事件

回答

1

而不是使用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。 –