在我的申请中,我已经睡了10秒。我使用boost :: this_thread :: sleep函数给出了睡眠。 有没有办法中断boost :: this_thread :: sleep函数。?
答案 0 :(得分:1)
来自make sure each controller method has a ValidateAntiForgeryToken attribute?:
<强>抛出:强>
boost::thread_interrupted
如果当前执行线程被中断。备注:强>
sleep()
是预定义的sleep()
reference之一。
因此,您需要在线程中执行的操作是将sleep()
调用放入try-catch
,然后捕获boost::thread_interrupted
。然后在线程对象上调用interruption points来中断睡眠。
顺便说一句,也来自interrupt()
:
警告强>
自3.0.0以来已弃用。
答案 1 :(得分:0)
您可以使用sleep
暂停interrupt()
功能。
你必须为你的线程启用中断,当它休眠时,你可以使用中断函数。
Boost有一个关于此的非常好的简短教程,请看这里:http://www.boost.org/doc/libs/1_54_0/doc/html/thread/thread_management.html#thread.thread_management.tutorial.interruption
答案 2 :(得分:0)
我使用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.