在获得在 Windows 和 Linux 下运行的软件的过程中,我不得不重写套接字层。在 Windows 上,我从 select 更改为 WSAPoll 并在包含标准事件之前使用 WSAWaitForMultipleEvents 在必要时在超时之前取消操作。由于我必须处理超过 1024 个输入和输出套接字,因此我必须在 linux 上从 select 更改为 poll 。有什么办法可以取消linux下的轮询等待。我必须添加远程连接,这会因轮询等待超时而减慢。
使用创建一个伪内部事件pipe()
并将它的读取端添加到poll()
列表中,使其成为第一个事件。
当您想取消投票时,将一个字符写入管道并poll()
返回。您会知道这是一个内部事件,因为它的索引为 0。
您甚至可以通过在管道中传递不同的值来使其成为一个粗略的消息传递系统。
您可以使用手动事件对您的 Windows 代码执行相同的操作。
看到这个IoEvent
类就是这样做的。