Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么QThread中有try-catch块?_Qt - Fatal编程技术网

为什么QThread中有try-catch块?

为什么QThread中有try-catch块?,qt,Qt,为什么会有 try { ... catch (...) { qTerminate(); } 在Qt5.10.1\5.10.1\Src\qtbase\Src\corelib\thread\qthread\u unix.cpp中 1) 这背后有什么逻辑吗?使用这个try-catch块,如果抛出未处理的异常,我们将释放调用堆栈(回溯) 2) 是否有人在编译QT时使用QT\u NO\u异常?历史上,QT在内部不使用异常,并且对于客户端代码来说也不是完全异常安全的,有关更多详细信息,请参

为什么会有

try
{
    ...
catch (...) {
    qTerminate();
}
在Qt5.10.1\5.10.1\Src\qtbase\Src\corelib\thread\qthread\u unix.cpp中

1) 这背后有什么逻辑吗?使用这个try-catch块,如果抛出未处理的异常,我们将释放调用堆栈(回溯)


2) 是否有人在编译QT时使用QT\u NO\u异常?

历史上,QT在内部不使用异常,并且对于客户端代码来说也不是完全异常安全的,有关更多详细信息,请参阅。最好不要将异常与Qt一起使用,或者确保在异常到达Qt内部之前捕获代码可能抛出的所有异常。您看到的代码是Qt对从客户机代码捕获异常的响应-此时没有比立即终止正在执行的程序更好的方法了。他们为什么担心程序终止?我不确定所有的平台,但在Windows和Android上,例如,如果任何线程抛出未处理的异常,程序将自动终止(据我所知,使用std::terminate())。不是吗?我不知道Qt开发人员的确切原因,但作为使用Qt的开发人员,我会感谢Qt,或者,事实上,感谢任何其他终止于异常源尽可能近的框架或库,在堆栈展开之后,没有几十个堆栈帧在中断的过程中设法破坏了一些库内部。我会说,在一个代码行中终止,该代码抛出了一个未处理的异常,以便运行库或操作系统用完整的调用栈创建崩溃转储。C++异常可能不一定终止一个应用通常,应该有
catch
es来处理相应函数中的异常。编译器生成的代码(调用
main()
)捕获“掉”出
main()
的未捕获异常,然后应用程序将中止/终止。嗯,这是一个“不归路点”的解决方案。更好的方法是,抛出的代码也应该捕获,除非没有比终止更好的处理方法。简而言之:
qTerminate()
没有什么问题。