C++在C的基础上加入了异常,对比C语言的setjump()一类简陋的函数设施似乎先进了很多。然而当多线程遇到异常时,事情似乎不再那么明了了。
先来看一段测试代码>_<
void proca()
{
printf("In ProcA\n");
printf("ProcA: Try Throw...\n");
throw 3;
}
void procb()
{
printf("In ProcB\n");
printf("ProcA: Try Throw...\n");
throw 4;
}
int main()
{
printf("In Main Thread.\n");
thread tda(proca);
printf("ProcA Started.\n");
thread tdb(procb);
printf("ProcB Started.\n");
this_thread::sleep_for(chrono::seconds(5));
printf("Start joining A\n");
tda.join();
printf("Start joining B\n");
tdb.join();
return 0;
}
输出结果(只是一种可能)
In Main Thread.
ProIn ProcA
cA Started.
ProcA: In ProcB
Try Throw...
Protcerminate called after throwing an instance of 'Aint:'
T
This application has requested the R