使基于选择的循环尽可能响应

时间:2011-03-22 06:41:04

标签: c++ multithreading select

此线程对网络活动非常敏感,但可以保证仅以每秒100次的速度处理消息队列。我可以继续减少超时但是在某一点之后我会忙着等待并且咀嚼CPU。这个解决方案是否真的与我没有切换到另一种方法一样好?

// semi pseudocode
while (1) {
  process_thread_message_queue(); // function returns near-instantly
  struct timeval t;
  t.tv_sec = 0;
  t.tv_usec = 10 * 1000; // 10ms = 0.01s
  if (select(n,&fdset,0,0,t)) // see if there are incoming packets for next 1/100 sec
  {
    ... // respond with more packets or processing
  }
}

1 个答案:

答案 0 :(得分:2)

这取决于您的操作系统为您提供的操作系统。在Windows上,您可以使用MsgWaitForMultipleObjectsEx等待线程消息和一堆句柄同时。这解决了您的问题。在其他操作系统上你应该有类似的东西。