我有一個處理多線程C++代碼中的異常的問題。以下程序以terminate called without an active exception Aborted (core dumped)
退出。std ::線程和異常處理
#include <thread>
#include <iostream>
#include <stdexcept>
struct Thing {
void runComponent()
{
throw std::runtime_error("oh no!\n");
}
void runController()
{
while (true) {}
}
void run()
{
auto control_thread = std::thread([this] { runController(); });
runComponent();
if (control_thread.joinable())
control_thread.join();
}
};
int main()
{
try {
Thing thing;
thing.run();
} catch (std::runtime_error &ex) {
std::cerr << ex.what();
}
}
相反,我想處理異常的try catch
塊main()
。我知道異常不會(通常)在線程之間傳遞,因爲線程每個都有自己的堆棧。這裏的問題(在我看來)是即使在非分叉線程上生成異常也沒有被處理。如果我註釋掉run()
與control_thread
有關的行,那麼一切正常。
與鏗鏘-3.8和-std=c++11 main.cpp -lpthread
編譯。
@Curious也許。我知道'exception_ptr'。但這裏的問題(我認爲)是thrower(runComponent)實際上是在主線程上。即使在這種情況下,我是否需要使用異常指針? – jonnew
在下面的答案中回答!我誤解了這個問題 – Curious