Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 线程:定时连接_Multithreading_C++11_Join - Fatal编程技术网

Multithreading 线程:定时连接

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

我正在编写一个多线程应用程序。在一个部分中,将删除一个线程。我想给线程时间来清理所有内容,但可能有一点,线程会等待userdata和块。我想加入线程,如果在X秒内无法加入,则应将其删除。在不使用boost的情况下,如何使用C++11实现这一点?我知道boost已经尝试了加入,但是std::thread似乎没有这个功能

更好理解的代码:

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