作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在编写一个多线程程序,它会在抛出特定异常时崩溃。剥离了越来越多的代码来查找问题后,我现在只剩下一个极其简单的案例,它会导致许多不同的崩溃之一,似乎是随机的。我不知道为什么要这样做。
程序的全部内容如下:
#include <windows.h>
WINAPI DWORD threadFunc(LPVOID x) {
while (true) {
try {
throw 1;
} catch (...) {
}
}
return 0;
}
int main(int argc, char *argv[]) {
CreateThread(NULL, 0, threadFunc, NULL, 0, NULL);
CreateThread(NULL, 0, threadFunc, NULL, 0, NULL);
Sleep(1000);
return 0;
}
据我所知,程序在尝试抛出时崩溃了,但不一定是第一次。
我在 Debug模式下遇到的错误是:
并且在没有调试器的情况下运行:
对于在如此短的程序中可能导致所有这些不同错误的原因,我完全感到困惑。注释掉其中一个 CreateThreads 会停止发生任何错误,因此它似乎与多线程和异常抛出的交互有关。
我使用的是 32 位 Windows XP SP3 和 MinGW 4.4.1
问题似乎是编译器中的错误(即 TDM-2 mingw32 4.4.1 - 我问这个问题时不知道 TDM 元素,但我认为这没有什么区别) .升级到 4.6.1 版后,一切似乎都运行良好。
感谢所有为这个问题做出贡献的人。
最佳答案
更新 在评论中澄清错误立即发生,而不是在进程关闭时,我能看到的唯一剩余结论是:
您的问题可能是异常处理运行时支持在线程仍处于事件状态时被卸载。当您退出 main 函数时,运行时将自行关闭。我原以为运行时会比这更健壮,但就是这样。
如果您确保在退出主函数之前所有线程都已终止,我希望您的问题会消失。无论如何,这都是一种很好的做法,您不希望线程在任何情况下都被强制终止。
关于c++ - 多线程 Win32 C++ 程序在多线程中使用 try/catch 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8048377/
我是一名优秀的程序员,十分优秀!