2011-09-14 6 views
1

간단한 QT (4.7.3)와 OpenCV의이 (2.3.1) 응용 프로그램은 VS2008에서 디버그에서 실행하는 메시지와 함께 종료 :Qt는 응용 프로그램이 종료 할 때 실패 (0xC000004B)

... 
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을 (의미 종료를 시작한 스레드를 일시 중단하려고 시도했습니다.

프로그램 소스 코드 : 코멘트 대화 모든 0xc000004b없이 원활하게 이동 및 프로그램에 하나의 스레드가있는 경우

#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(); 
} 

. 대화 상자 대화 상자가 닫히지 않습니다 양산중인 스레드의 수, 실행되면 이러한 스레드에 대해 무엇

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()
[프레임 아래에 잘못된 및/또는 실종 될 수있다, NTDLL.DLL로드없는 문자] NTDLL.DLL 77a01f36 (: 그들은 같은 침묵 스택을)
NTDLL.DLL! 77a2471e()
KERNEL32.DLL! 7587339a()
NTDLL.DLL! 77a19ed2()
NTDLL.DLL! 77a19ea5()

의 장소 opencv dll의 CvModule 정적 객체가 관심 대상입니다. 을 OpenCV \ 2.3.1 \ 모듈 \ 코어 \ SRC \ system.cpp :

CvModule cxcore_module(&cxcore_info); 

에서 할 내가 소멸자에 도달하지만, 좋은에서 (대화없이)하지 않는 경우 실패합니다.

0xC000004B와 같은 상황이 실제 문제입니까?

어디에서 해결책을 찾아야할까요?

감사합니다.

+0

sourceforge에서 공식적으로 미리 작성된 OpenCV 바이너리를 사용하는 경우 TBB 스레드가 표시됩니다. –

답변

0

나는 귀하의 앱이 실패하지 않았다고 믿습니다.

스레드의 종료 코드는 아무 것도 될 수 있습니다. 스레드의 0이 아닌 반환 값은 오류를 나타내지 않고 어떤 이유로 든 스레드가 종료 할 때 해당 값을 반환했음을 나타냅니다.

종료시 충돌이나 다른 문제가 발생하지 않는 한, 0이 아닌 값을 무시해도 안전하다고 생각합니다. 스레드가이 값을 반환하는 이유를 완전히 이해하려면 QT 코드를 디버그하고이를 수행하는 스레드를 결정해야합니다. 스레드를 찾으면 종료 점에 중단 점을 넣을 수 있습니다.이 함수의 논리가이 값을 반환하기로 결정한 이유를 확인하십시오.

관련 문제