C++ 如何中断boost::c++;

C++ 如何中断boost::c++;,c++,boost-thread,C++,Boost Thread,在我的应用程序中,我给出了10秒的睡眠时间。我使用boost::this_thread::sleep函数提供了sleep。 是否有任何可能的方法中断boost::this_thread::sleep函数?您可以使用interrupt()中断sleep函数 你必须为你的线程启用中断,当它休眠时,你可以使用中断功能 Boost在线上有一个关于这方面的很好的简短教程,请看这里:来自: 抛出: boost::thread\u中断如果当前执行线程中断 注意事项: sleep()是预定义的方法之一 因此,您

在我的应用程序中,我给出了10秒的睡眠时间。我使用boost::this_thread::sleep函数提供了sleep。
是否有任何可能的方法中断boost::this_thread::sleep函数?

您可以使用
interrupt()
中断
sleep
函数

你必须为你的线程启用中断,当它休眠时,你可以使用中断功能

Boost在线上有一个关于这方面的很好的简短教程,请看这里:

来自:

抛出:
boost::thread\u中断
如果当前执行线程中断

注意事项:
sleep()
是预定义的方法之一

因此,您需要在线程中执行的是将
sleep()
调用放入
try catch
,然后catch
boost::thread\u中断
。然后调用线程对象来中断睡眠


顺便说一句,也可以从:

警告

自3.0.0以来已弃用

使用和代替

我使用boost::this_thread::sleep函数提供了sleep。有没有可能中断boost::this_thread::sleep函数

不是这样的,但是实现它并不困难,就
boost::this\u 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;
    }
}

@WouterHuysentruit,你的回答是否有趣?嘿@Joachim Pileborg我正在使用“boost::this_thread”中的睡眠函数,它没有中断API,我的要求是使用“boost::this_thread”,所以有没有办法中断睡眠。@user3721279
boost::this_thread::sleep
正如我在回答中引用的链接所述,中断点。请阅读我的答案中提供的链接。
std::atomic<bool>& interrupt = false;

void f() {
    sleep_for(boost::posix_time::milliseconds(200), interrupt);
}
interrupt.store(true); /// will cause thread 1 to be interrupted, if called
                       /// during execution of sleep_for.