ThreadQueue - 服务器开发 - C ++

时间:2010-10-24 09:54:12

标签: c++ multithreading queue

今天我有一个想法,为我的服务器应用程序制作一个用于C ++的ThreadQueue。

 unsigned int m_Actives; // Count of active threads
 unsigned int m_Maximum;

 std::map<HANDLE, unsigned int> m_Queue;
 std::map<HANDLE, unsigned int>::iterator m_QueueIt;

在一个额外的线程中我会处理这些:

 while(true)
 {
  if(m_Actives != m_Maximum)
  {
   if(m_Queue.size() > 0)
   {
    uintptr_t h = _beginthread((void(__cdecl*)(void*))m_QueueIt->first, 0, NULL);
    m_Actives++;
   }
   else
   {
    Sleep(100); // Little Cooldown, should it be higher? or lower?
   }
  }
 }

m_Maximum是setable,是最大线程数。我认为这应该工作,但现在我需要等待foreach线程,它是活动的,需要检查它是否完成/活着。但为此我会使用WaitForSingleObject。但是我需要每个线程1个线程。所以2线程。在一件事得到处理。在另一个中,它等待1个线程退出。

但我认为这真的很糟糕。你会做什么?

1 个答案:

答案 0 :(得分:0)

您可以使用WaitForMultipleObjects等待任何已启动的线程结束。

或者,在这种情况下,在每个线程中你可以更好地发送EVENT,然后再停止它。比,监视器线程应该只等待并处理此事件。

但是,说实话,你的描述和来源相当棘手......

相关问题