![]() |
1
2
我建议为此使用boost::threads库。您可以定期检查阻塞线程是否可接合(即,仍在工作),然后在五秒钟后中断它。然后,您需要编写阻塞函数来处理该中断并干净地退出。
编辑:检查 Thread Management 更多中断点的文档和boost threads类的定义。
edit2:如果在等待阻塞线程完成时不需要在主线程中做任何工作,并且没有方便的地方来处理中断
|
![]() |
2
2
我认为你大概有正确的想法,尽管你可能想要
要在线程之间进行通信,最简单的方法可能是使用原子变量。您还可以让工作线程在成功时将消息传回主线程,如果主线程在5秒计时器触发时看不到消息,则应假定工作线程被阻塞。 一般来说,杀死阻塞的线程是危险的。Java文档强烈反对做这件事,如果有的话,问题更严重的是C++。考虑到自己被警告了! |
![]() |
3
0
首先创建线程是一件昂贵的事情,所以每次调用块都这样做可能不是一个好主意。 第二,解决这个问题的方法有很多,这也很大程度上取决于您的环境。例如,在Windows中,实现这一点的一种可能方法是使用带有消息队列的工作线程。然后,您定义了一些在工作线程中处理的消息。一个可以是wm_CallBlock,另一个可以是wm_Areyouready和wm_Yesiam,当您想调用block()时,您可以将该消息发布到工作线程,它将调用函数。通过消息,还可以传递block()所需的任何参数。因为你的功能是阻塞的-如果你然后发布一条消息wm youready,你将不会直接得到wm yesiam的回复。所以您可以在此基础上构建超时。 |
![]() |
Anton Konikov · 转换为单一时区的日期[重复] 6 年前 |
![]() |
MrEmper · Java-自动生成当前日期+用户输入时间 6 年前 |
![]() |
R A · 尝试为我的HTML游戏创建最快时间的高分 6 年前 |
![]() |
Chintan7027 · MYSQL以数字时间格式计算日期差 6 年前 |
![]() |
user3725021 · 将字符数据帧列转换为分数时间 6 年前 |
![]() |
Ramesh S · 如何按时间禁用当前日期? 6 年前 |
|
Faisal Alzahrani · 用Java计算程序的Big-O 6 年前 |