2011-09-14 29 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

私はあなたのアプリが失敗していないと信じています。

スレッドの終了コードは何でもかまいません。スレッドからのゼロ以外の戻り値はエラーを示さず、終了時にスレッドが何らかの理由でその値を戻したことを示します。

終了時にクラッシュやその他の問題が発生しない限り、ゼロ以外の戻り値は無視しても問題ありません。スレッドがこの値を返す理由を完全に理解したい場合は、QTコードをデバッグし、どのスレッドがこれを行っているかを判断する必要があります。スレッドを見つけると、出口点にブレークポイントを置くことができます。なぜこの関数のロジックがこの値を返すことにしたのかを知ることができます。

関連する問題