views:

38

answers:

1

Today i got a idea to make an ThreadQueue for C++, for my Server Application.

 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;

In an extra Thread i would to handle these while:

 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 is setable and is the Maximal Thread Count. I think that should work, but now i need to Wait foreach Thread which is active and need to check if its finished/alive or not. But for this i would use WaitForSingleObject. But then i need 1 Thread per Thread. So 2 Threads. In the one something get handled. In the other one it wait for the 1 Thread to exit.

But i think that realy bad. What would you do?

A: 

You can use WaitForMultipleObjects to wait while any of started threads is ended.

Or, what is probably better in this case in each thread you can send an EVENT before stopping it. Than, the monitor thread should only wait and process this event.

But, to be honest, your description and source is rather tricky....

Gregory