如何创建未知的线程数量c ++

时间:2015-06-17 21:13:07

标签: c++ multithreading client server

我写了一个连接到客户端的服务器c ++,我想使用线程来做一些操作和一些客户端,而不是只做一个客户端完成并转到另一个客户端。但是我不能创造出特定的未知数量的那些。 可以用sombody帮我吗?

while (1)
{
    ClientSocket = INVALID_SOCKET;
    ClientSocket = accept(ListenSocket, NULL, NULL); // Accept a client socket
    if (ClientSocket == INVALID_SOCKET) //Check for errors
    {
        printf("accept failed: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
    }
    else
    {
        t->join();
        std::thread t(&Manager::acceptance, this,ClientSocket,ListenSocket);
        t.join();
    }
}

并且在接受中我有recv和send函数。 但它只适用于一个线程,我不知道每次sombody进入时如何创建线程。 谢谢! 尼尔

1 个答案:

答案 0 :(得分:1)

您可能正在执行t.join();,以避免在std::thread对象t超出else末尾的范围时,您的线程会过早被杀死科。但是这样,您的主线程被阻止,您无法创建另一个线程。

保持线程活动的更好方法是在std::threadstd::list而不是范围的局部变量中创建std::map对象。这样你仍然可以控制它,但你的线程不会过早终止:

std::list<std::thread> workers;
// ...
if (ClientSocket == INVALID_SOCKET) //Check for errors
{
    // ...
}
else
{
    workers.push_back(std::thread(&Manager::acceptance, this, ClientSocket, ListenSocket));
}