我正在研究多线程TCP服务器,但是在创建线程后如何使线程独立工作时我遇到了问题。我的代码如下:
int handler( int *client_fd, int i )
{
// receive TCP message and parse it here
recv(....);
}
int main(int argc, char ** argv)
{
// set up network connection
while( true )
{
if ( ( client_fd = accept( ... ) ) > 0 )
{
std::thread th ( handler, &client_fd, i );
th.join();
}
}
}
此方法不起作用,因为服务器按顺序提供线程:仅在完成第一个线程后才启动第二个线程的操作。我想这是因为th.join()函数使main函数等待第二个接受操作,直到第一个线程结束。
但我想要的是从多个客户端连接并行处理多个任务。我该怎么办?
答案 0 :(得分:0)
使用detach
()分离线程,而不是加入。线程将继续运行,std::thread
对象的构造函数将自行清理,主执行线程将继续等待下一个被接受的套接字。
这回答了问题的第一部分,即“并行过程”部分。答案的第二部分,“我该怎么做”,是你需要自己回答的问题。只有您了解大型应用程序的完整要求。
如果您的应用程序确实需要加入执行线程,由于某些特殊原因,显然您需要找到替代您的需求。为了实现健壮,有效的线程管理,可以采用各种不同的方法。最好的方法实际上取决于您的确切要求,您需要自己分析。