c++ - boost disable_interruption 不阻止 thread_interrupted

标签 c++ boost boost-thread

我试图防止线程在特定范围内中断。但是,使用 boost::this_thread::disable_interruption di() 似乎没有任何效果。

#include <boost/thread.hpp>
#include <iostream>

void worker() {
    std::cout << "START" << std::endl;

    for(;;) {
        {
            boost::this_thread::disable_interruption di();
            try {
                boost::this_thread::sleep(boost::posix_time::seconds(1));
            }
            catch(boost::thread_interrupted & e) {
                assert( false );
            }
        }

        try {
            boost::this_thread::interruption_point();
        }
        catch(boost::thread_interrupted & e) {
            break;
        }

    }

    std::cout << "END" << std::endl;
}


int main() {
    boost::thread thread(&worker);
    thread.interrupt();
    thread.join();
}

文档似乎暗示 boost::this_thread::sleep()di 处于运行状态时不会抛出 boost::thread_interrupted范围。

我做错了什么?

最佳答案

您应该删除以下行中的括号:

//boost::this_thread::disable_interruption di();
boost::this_thread::disable_interruption di;

您没有创建disable_interruption对象,而是声明了函数di。

关于c++ - boost disable_interruption 不阻止 thread_interrupted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6976161/

相关文章:

c++ - 在类里面使用boost内存池

c++ - capture 如何将基类中的 this 派生为 lambda 函数?

c++ - 在 MSMQ 消息中发送具有 BSTR 值类型的 COM 对象

c++ - 如何检查我打开的文件是否用于在 C 中读取或写入

c++ - 优雅地终止基于 Boost Asio 的 Windows 控制台应用程序

c++ - boost::extension.hpp的原因未为无序容器和其他一些容器定义hash_value()

c++ - 通过套接字发送和接收字符串的子函数

c++ - 互斥实现可以互换吗(独立于线程实现)

c++ - 如何从自身加入 std::thread(在 C++11 中)

c++ - 新线程中的launch方法