我写了一个连接到客户端的服务器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进入时如何创建线程。 谢谢! 尼尔
答案 0 :(得分:1)
您可能正在执行t.join();
,以避免在std::thread
对象t
超出else
末尾的范围时,您的线程会过早被杀死科。但是这样,您的主线程被阻止,您无法创建另一个线程。
保持线程活动的更好方法是在std::thread
或std::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));
}