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

how to create unkown amount of threads c++

我写了一个连接到客户端的服务器 c++,我想使用线程来执行一些操作并与一些客户端一起执行,而不是只执行一个客户端完成并转到另一个客户端。但我不能只创建特定数量的未知数。 有人可以帮助我吗?

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();
    }
}

并且在验收中我有接收和发送功能。 但它只适用于一个线程,我不知道每次有人进入时如何创建线程。 谢谢! 尼尔

您可能正在执行 t.join(); 以避免当 std::thread 对象 t 在 [=14] 结束时超出范围时您的线程被过早杀死=] 分支。但是这样,你的主线程被阻塞了,你不能创建另一个线程。

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

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