我没有办法唤醒被poll.poll()函数阻塞的线程。有人能帮我吗?
最初获取这个额外文件描述符的正常方法是使用pipe()打开一个未命名的管道。这样,您就有了两个描述符:一个是在poll()中进行读取等待,另一个是向其写入以唤醒在poll上等待的线程。
想要在阻塞轮询超时之前唤醒(2)或选择(2)有很多正当的理由。任何时候,当您需要在被轮询的fd列表中添加或删除套接字时,都需要打破等待。如果你依赖超时,超时必须很短才能做出响应,但短的超时可能会导致很多不必要的颠簸。
无论如何,对于Linux,您可以使用eventfd(2)创建一个文件描述符,将其添加到fd列表中。当您需要打破等待时,请写入eventfd。
在轮询调用中使用超时,这样它就不会无限期地阻塞。注意:超时值以毫秒为单位。