C-当某些事件发生在另一个线程上时,如何从recv()/recvfrom()中出来



当某些事件发生在另一个线程上时,如何从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()

最新更新