在一定时间后中断线程,在等待时不阻塞
Interrupt thread after amount of time, without blocking while waiting
我想在后台启动一个线程,并希望在一定的时间后停止它,如果它没有完成。主要问题是,在等待线程完成或计时器到达截止日期时,程序不应该阻塞。保证这一点很重要。
我尝试了这个例子,但是在等待timed_join
时,它阻塞了。我必须宣布一个警告,有些计算正在进行中。
void CallbackReceived() {
boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(500);
boost::thread thrd(&Foo);
if (thrd.timed_join(timeout)) {
//finished
} else {
//Not finished;
}
}
你有什么建议吗?
您可以启动一个线程,它将启动您的线程并等待time_join。
main
|
|---thread
| |
| |-----thread
| |
| |
| |
| join<------
|
|
但是如果你只是想要一个警告,在启动线程之前放置它。如果它是一个图形应用程序,并且您仍然希望处理事件,则必须使主线程可用,如上所示。
必须停止的线程可以在一段时间后自行退出。
例如,如果它在循环中执行所有工作,它可以定期检查(例如每10次循环)是否已经过了最大时间,并在时间已经过的情况下退出。
主线程可以不时地检查完成任务(或过早终止)的线程并删除它们。
相关文章:
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- C++在不同线程中改变向量
- 如何在多线程中正确使用unique_ptr进行多态性?
- 虚假唤醒是否会解锁所有等待线程,甚至是不相关的线程?
- sigwait() 在多线程程序中不起作用
- C++线程:如何在一个线程仍在运行时阻止另一个线程执行 (Win32)
- 如何制作一个只能在一个线程上同时执行的函数?
- 成员变量在多线程 C++ 时自行更改
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 如何检索指向在单独线程上运行的函数的移动指针?
- 如何正确取消析构函数中的 Boost deadline_timer(在多线程环境中)?
- 互斥,Windows 10,c ++,在一个线程上获取,在另一个线程上发布
- 为什么 beginthreadex 线程参数变量在父线程中没有更新
- 使用 std::atomic 标志和 std::condition_variable 在工作线程上等待
- 在退出进程时等待线程完成
- 在纯虚拟类的析构函数中等待线程死亡会导致运行时错误
- Qt5中存在哪些同步原语,允许我在单个线程中等待信号到达
- 如何在消费者线程中组织等待来自主线程的数据
- 如何等待线程仅在它已启动时才加入