Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果要测试请求的中断,为什么要使用boost disable_interruption()?_C++_Multithreading_Boost Thread - Fatal编程技术网

C++ 如果要测试请求的中断,为什么要使用boost disable_interruption()?

C++ 如果要测试请求的中断,为什么要使用boost disable_interruption()?,c++,multithreading,boost-thread,C++,Multithreading,Boost Thread,我在很多地方看到这样的代码: void threadFunction() { boost::this_thread::disable_interruption disable; while (!boost::this_thread::interruption_requested()) { //do stuff } } 对我来说,这看起来像是我“禁用”了线程函数被中断,但是我再次测试了中断。 奇迹般地,它起作用了。 有人能给我解释一下它在幕

我在很多地方看到这样的代码:

void threadFunction()
{
    boost::this_thread::disable_interruption disable;
    while (!boost::this_thread::interruption_requested())
    {
            //do stuff
    }
}
对我来说,这看起来像是我“禁用”了线程函数被中断,但是我再次测试了中断。 奇迹般地,它起作用了。 有人能给我解释一下它在幕后到底做了什么吗?
谢谢大家!

禁用中断
防止线程实际被中断;它不会阻止设置中断状态。然后,
interruption\u requested
测试是否设置了中断状态

请参阅Boost文档:特别是

各种方法被归类为“中断点”,如果在请求中断时调用它们,则会引发异常,除非中断已被禁用

简言之:

  • 禁用中断可防止中断实际停止线程,但中断仍会将线程标记为“中断请求”
  • interruption\u requested
    方法检查是否已请求中断