如何让线程在TCP服务器中独立工作

时间:2015-08-27 01:22:25

标签: c++ multithreading tcp server

我正在研究多线程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函数等待第二个接受操作,直到第一个线程结束。

但我想要的是从多个客户端连接并行处理多个任务。我该怎么办?

1 个答案:

答案 0 :(得分:0)

使用detach()分离线程,而不是加入。线程将继续运行,std::thread对象的构造函数将自行清理,主执行线程将继续等待下一个被接受的套接字。

这回答了问题的第一部分,即“并行过程”部分。答案的第二部分,“我该怎么做”,是你需要自己回答的问题。只有您了解大型应用程序的完整要求。

如果您的应用程序确实需要加入执行线程,由于某些特殊原因,显然您需要找到替代您的需求。为了实现健壮,有效的线程管理,可以采用各种不同的方法。最好的方法实际上取决于您的确切要求,您需要自己分析。