当某些事件发生在另一个线程上时,如何从recv()/recvfrom()中出来?
示例代码,
while ( anyConditionCheckingHere )
{
if (recv(...) < 0) // ALREADY waiting for message here after fulfilling conditions
{
}
}
现在,如果有在后台运行的另一个线程&amp;某些事件发生在该线程中,那么,我如何停止等待消息,或者在发生该事件发生时如何从该阻塞呼叫中出来?
您有2个选项,我可以想到
- 使用非阻止套接字,并在此处使用C/C 插座的代码和非块RECV() 连续对数据进行轮询
- 使用SELECT等待几个文件描述符,保存轮询所需的资源。例如,请查看此处http://jhshi.me/2013/11/02/use-select-to-monitor-monitor-molultiple-file-descriptors/index.html#.xbse6fwzauk
如果使用线程,则无需担心阻止recv()
。当事件发生在下一个线程上时,它将通过调度程序进行调度,并且将处理事件,而第一个线程将继续阻止recv()
。