线程中没有处理C ++异常

时间:2014-07-19 08:52:55

标签: c++ exception visual-studio-2013

为什么VS 2013没有给出unhandled exception例外,或者在执行以下代码时引发了任何中止信号?

#include <thread>

void f1()
{
    throw(1);
}

int main(int argc, char* argv[])
{
    std::thread(f1);
}

C ++标准声明应在以下情况下调用std :: terminate:

when the exception handling mechanism cannot find a handler for a thrown exception(15.5.1)

in such cases, std::terminate() is called(15.5.2)

1 个答案:

答案 0 :(得分:3)

问题是在这段代码中,main()可以在生成的线程(f1)之前结束。

请改为尝试:

#include <thread>

void f1()
{
    throw(1);
}

int main(int argc, char* argv[])
{
    std::thread t(f1);
    t.join(); // wait for the thread to terminate
}

此调用在Coliru(gcc)上终止()。

不幸的是,当遇到这个时,Visual Studio 2013将直接调用abort()而不是terminate()(至少在我的测试中),所以即使添加一个处理程序(使用std :: set_handler())显然也无法工作。 I reported this to the VS team

但是,此代码会触发错误,而您的初始代码却无法保证。