2013-10-18 40 views
0

我想通過一個信號通知工作線程 - 它應該停止等待事件並檢查一些全局條件。我在Linux上使用epoll_pwait,我想在Mac OS上也這樣做。如何用發送給線程的信號中斷kevent()?

kqueue(2)手冊說:

EVFILT_SIGNAL ......只有信號發送到該進程,而不是一個特定的線程,將觸發過濾器。

如何克服這個限制?或者可能有另一個好方法來通知kevent等待的唯一線程?

回答

0

任何I/O複用API通用的方法是:

  1. 打開使用管道()函數的管道,
  2. 其讀端添加到您的KEVENT/epoll的/不管集,
  3. 寫一些東西到管道的另一端來喚醒你的事件輪詢器。