Multithreading 线程:定时连接
我正在编写一个多线程应用程序。在一个部分中,将删除一个线程。我想给线程时间来清理所有内容,但可能有一点,线程会等待userdata和块。我想加入线程,如果在X秒内无法加入,则应将其删除。在不使用boost的情况下,如何使用C++11实现这一点?我知道boost已经尝试了加入,但是std::thread似乎没有这个功能 更好理解的代码:Multithreading 线程:定时连接,multithreading,c++11,join,Multithreading,C++11,Join,我正在编写一个多线程应用程序。在一个部分中,将删除一个线程。我想给线程时间来清理所有内容,但可能有一点,线程会等待userdata和块。我想加入线程,如果在X秒内无法加入,则应将其删除。在不使用boost的情况下,如何使用C++11实现这一点?我知道boost已经尝试了加入,但是std::thread似乎没有这个功能 更好理解的代码: while (clientRunning) { char data[8192]; recv(sockfd,data,8192,MSG_WAITAL
while (clientRunning) {
char data[8192];
recv(sockfd,data,8192,MSG_WAITALL);
}
此函数位于线程内部(减少到最小值)。现在我想使用thread->join()连接这个线程;让该连接超时,这样它将尝试连接2分钟,如果没有,它将强制终止线程。请发布一些代码。我不知道代码在这里有什么帮助。我在while循环中有一个线程,其中有一个阻塞函数(recv),我将用一些小代码编辑我的帖子…@Nidhoegger有什么消息吗?我需要一个以上的线程类似的东西!是和否。基本上我开始做的不是使用recv等待套接字,而是使用
epoll
或select
。当您调用SIGCHLD
信号时,epoll和select将被中断并返回EINTR
作为errno
。这样我现在知道线程被中断了,想要加入。但是您必须非常小心,如果您的进程使用fork
或类似的机制,您将由于其他原因(子进程退出并需要清理)得到SIGCHLD
信号。但请注意,这只适用于*nix系统(在windows上,我想您可以使用WaitForSingleObject