2013-10-18 34 views
0

我想通过一个信号通知工作线程 - 它应该停止等待事件并检查一些全局条件。我在Linux上使用epoll_pwait,我想在Mac OS上也这样做。如何用发送给线程的信号中断kevent()?

kqueue(2)手册说:

EVFILT_SIGNAL ......只有信号发送到该进程,而不是一个特定的线程,将触发过滤器。

如何克服这个限制?或者可能有另一个好方法来通知kevent等待的唯一线程?

回答

0

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

  1. 打开使用管道()函数的管道,
  2. 其读端添加到您的KEVENT/epoll的/不管集,
  3. 写一些东西到管道的另一端来唤醒你的事件轮询器。