ThreadQueue - Разработка для серверов - C ++ - PullRequest
0 голосов
/ 24 октября 2010

Сегодня у меня появилась идея сделать ThreadQueue для C ++ для моего серверного приложения.

 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 является настраиваемым и является максимальным числом потоков. Я думаю, что это должно работать, но теперь мне нужно подождать foreach Thread, который активен, и нужно проверить, закончен ли он / жив или нет. Но для этого я бы использовал WaitForSingleObject. Но тогда мне нужно 1 поток на тему. Итак, 2 темы. В одном что-то получалось. В другом он ожидает выхода 1 Thread.

Но я думаю, что это действительно плохо. Что бы вы сделали?

1 Ответ

0 голосов
/ 25 октября 2010

Вы можете использовать WaitForMultipleObjects для ожидания завершения любого из запущенных потоков.

Или, что, вероятно, лучше в этом случае в каждом потоке, вы можете отправить СОБЫТИЕ перед его остановкой. Затем поток монитора должен только ждать и обрабатывать это событие.

Но, если честно, ваше описание и источник довольно хитры ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...