如何创建未知数量的线程 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::list
或 std::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));
}
我写了一个连接到客户端的服务器 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::list
或 std::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));
}