【发布时间】:2015-09-03 07:59:54
【问题描述】:
我编写了一个连接到客户端的服务器 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();
}
}
在接受中,我有接收和发送功能。 但它只适用于一个线程,我不知道每次有人进入时如何创建线程。 谢谢! 尼尔
【问题讨论】:
-
您可能正在寻找“未知”以外的其他词。
-
您可以根据需要保留您创建的所有线程的
vector。 -
我的意思是无限的,当有人进入我的服务器时,我会为他创建一个新的Theard
-
每个客户端线程模型的扩展性很差。您确实想创建一个线程池,并将任务推送到由该池提供服务的队列中。这允许您调整线程数以适应可用的处理器。
-
如果你愿意,没有什么能阻止你动态创建线程(就像你可以在
std::vector<int>中动态创建整数一样)。但这对于服务器来说不一定是一个好主意。您可能需要线程池和/或非阻塞 I/O。
标签: c++ multithreading client server