今天我有一个想法,为我的服务器应用程序制作一个用于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个线程退出。
但我认为这真的很糟糕。你会做什么?
答案 0 :(得分:0)
您可以使用WaitForMultipleObjects等待任何已启动的线程结束。
或者,在这种情况下,在每个线程中你可以更好地发送EVENT,然后再停止它。比,监视器线程应该只等待并处理此事件。
但是,说实话,你的描述和来源相当棘手......