如何在c++中中断boost::this_thread
How to interrupt boost::this_thread in c++
在我的应用程序中,我已经给了10秒的睡眠。我已经使用boost::this_thread::sleep函数给了睡眠。是否有任何可能的方法来中断boost::this_thread::sleep函数?
来自sleep()
参考:
抛出:
如果当前执行线程被中断,则返回boost::thread_interrupted
。指出:
sleep()
是预定义的中断点之一。
所以你需要在线程中做的是把sleep()
调用放在try-catch
中,并捕获boost::thread_interrupted
。然后调用线程对象上的interrupt()
来中断睡眠。
顺便说一下,也是来自sleep
参考:
3.0.0后已弃用。
使用
sleep_for()
和sleep_until()
代替。
可以使用interrupt()
中断sleep
功能。
你必须为你的线程启用中断,当它处于睡眠状态时,你可以使用中断函数。
Boost在网上有一个很好的关于这个的简短教程,看看这里:http://www.boost.org/doc/libs/1_54_0/doc/html/thread/thread_management.html#thread.thread_management.tutorial.interruption
我已经给睡眠使用boost::this_thread::sleep函数。是否有任何可能的方法来中断boost::this_thread::sleep函数?
不是这样的,但实现它并不困难,就boost::this_thread::sleep
而言:
void sleep_for(boost::posix_time::milliseconds interval, std::atomic<bool>& interrupted)
{
static const auto resolution = boost::posix_time::milliseconds(10));
ptime end_time(microsec_clock::local_time()) + interval;
while( !interrupted.load() )
{
boost::this_thread::sleep(resolution);
if(microsec_clock::local_time() > end_time)
break;
}
}
客户端代码线程1:
std::atomic<bool>& interrupt = false;
void f() {
sleep_for(boost::posix_time::milliseconds(200), interrupt);
}
客户端代码线程2:
interrupt.store(true); /// will cause thread 1 to be interrupted, if called
/// during execution of sleep_for.
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 为什么使用 "this" 指针调用派生成员函数?
- C++错误:"error: int aaa::bbb is protected within this context"
- 在std::thread中,joinable()然后join()线程安全吗
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 关于C++中具有多重继承"this"指针的说明
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 分离一个静态常量 std::thread?
- 在noexcept 规范中是否允许使用"this"?
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- 使用 thread 类在 C++ 中构造线程的动态数组时出错
- 如何修复"error: ‘_1’ was not declared in this scope"?
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 如何从 std::thread 返回值
- C++调用具有 *this 属性的单个帮助程序函数
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- Doees the 'this' 指针参与虚函数的多态行为
- 在 c++ 中正确定义"this"关键字?
- std::thread,在"this"上启动线程(从类本身内部)