【发布时间】:2019-08-07 14:53:15
【问题描述】:
此程序在异常处理程序被捕获之前终止
void main(){
try{
work1();
std::thread joinableThread(
[](){
work2();
}
);
work3();
throw std::runtime_error("catch me if you can");
joinableThread.join();
} catch(const std::runtime_error& ex){
std::cout << "You did it!" << std::endl;
}
}
我想处理异常处理程序,但程序在堆栈展开期间终止。如何确保在堆栈展开期间加入线程?
【问题讨论】:
-
具有
joins 线程的析构函数的虚拟对象? -
在
try外面创建线程对象,在try里面初始化,在catch里面检查是不是joinable然后join呢? -
两个选项:a)在 try-block 之外创建你的线程(编辑:这是之前评论者的建议)b)而不是
std::thread使用加入破坏的变体,例如这个 @ 987654323@
标签: c++ multithreading exception stack-unwinding