gpt4 book ai didi

c++ - 带有 opencv 的 qt 应用程序在关闭时失败 (0xC000004B)

转载 作者:太空宇宙 更新时间:2023-11-04 14:21:25 25 4
gpt4 key购买 nike

在 vs2008 中调试运行的简单 qt(4.7.3) 和 opencv(2.3.1) 应用程序终止并显示消息:

...
The thread 'Win32 Thread' (0x2418) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x1cc4) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0xd7c) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x2108) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x17a0) has exited with code -1073741749 (0xc000004b).
The program '[472] QtArrSurf.exe: Native' has exited with code 0 (0x0).

0xC000004B 错误代码表示 STATUS_THREAD_IS_TERMINATING(试图暂停已开始终止的线程)。

程序源码:

#include <QtGui>
#include <opencv2/features2d/features2d.hpp>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QPushButton b("button");
b.show();
QFileDialog::getOpenFileNames(&b, "Dialog", "", "Files(*.png)"); // problem trigger
cv::SURF detectorSURF; // just to touch opencv
return a.exec();
}

如果没有 0xc000004b,评论对话框一切顺利,程序中只有一个线程。执行对话框时会生成许多线程,这些线程不会随对话框关闭:

0 > 6192    Main Thread Main Thread main    Normal  0
0 8928 Worker Thread Win32 Thread 77a01f36 Normal 0
0 4620 Worker Thread Win32 Thread 77a01f36 Normal 0
0 9800 Worker Thread Win32 Thread 77a01f36 Normal 0
0 7924 Worker Thread Win32 Thread 77a0014d Normal 0
0 3844 Worker Thread Win32 Thread 77a01f36 Normal 0
0 2524 RPC Thread RPC Callback Thread 779ffd81 Normal 0
0 3068 Worker Thread Win32 Thread 77a00552 Normal 0
...

这些线程是关于什么的?他们有静默堆栈,像这样:

ntdll.dll!77a01f36()
[Frames below may be incorrect and/or missing, no symbols loaded for ntdll.dll] ntdll.dll!77a01f36()
ntdll.dll!77a2471e()
kernel32.dll!7587339a()
ntdll.dll!77a19ed2()
ntdll.dll!77a19ea5()

感兴趣的地方是opencv dll中的CvModule静态对象。OpenCV\2.3.1\modules\core\src\system.cpp:

 CvModule cxcore_module( &cxcore_info );

在失败的情况下我不会到达它的析构函数,但在好的情况下(没有对话)会。

0xC000004B 这种情况是真正的问题吗?

有什么建议可以在哪里寻找解决方案吗?

谢谢。

最佳答案

我相信您的应用不会失败。

线程的退出代码可以是任何东西,线程的非零返回值并不表示错误,它只是表示线程在退出时返回了该值,无论出于何种原因。

除非您在退出时遇到崩溃或其他问题,否则我认为您可以安全地忽略该非零返回值。如果您想完全理解线程返回此值的原因,您将需要调试 QT 代码并确定哪个线程正在执行此操作。如果您找到该线程,您可以在它的退出点放置一个断点,以查看为什么该函数中的逻辑决定返回该值。

关于c++ - 带有 opencv 的 qt 应用程序在关闭时失败 (0xC000004B),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com