C++ 11的exception_ptr
類型允許在線程之間傳輸異常。所以在這種情況下,如果你想處理異常,你可以考慮以下方法。
#include <iostream>
#include<thread>
#include<exception>
#include<stdexcept>
static std::exception_ptr eptr = nullptr;
void foo()
{
try
{
....
throw std::runtime_error("Bla bla"); // put your exception instead of runtime_error
}
catch(...)
{
eptr = std::current_exception();
}
}
int main(int argc, char **argv)
{
std::thread t(foo);
t.join();
if (eptr)
{
try
{
std::rethrow_exception(eptr);
}
catch(const std::exception &ex)
{
std::cerr << "Thread exited: " << ex.what() << "\n";
return EXIT_FAILURE;
}
}
return EXIT_SUCCESS;
}
這種方法可以確保該計劃將與狀態EXIT_FAILURE
如果線程拋出一個異常退出。
這是你的程序。您可以完全控制退出狀態。 – stark
你可以顯示MCVE嗎? – Jarod42
它應該這樣做('std :: terminate'調用'std :: abort'):_「實現定義的狀態返回到主機環境,表示不成功執行。」_我們需要[mcve] +平臺詳細信息。請參閱:http://en.cppreference.com/w/cpp/utility/program/abort –