Simple qt (4.7.3) et opencv (2.3.1) de l'application en cours d'exécution sous débogage dans VS2008 se termine par messages:application qt avec opencv ne parvient pas à l'arrêt (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 code d'erreur signifie STATUS_THREAD_IS_TERMINATING (Une tentative a été faite pour suspendre un thread qui a commencé à se terminer).
code source du programme:
#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();
}
Si tout commentaire dialogue se déroule sans problème, sans 0xc000004b et il n'y a qu'un seul thread dans le programme. Lorsque le dialogue est exécuté un certain nombre de fils sont donné naissance, qui ne se ferme pas avec boîte de dialogue:
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
...
Ce que ces discussions sont sur le point? Ils ont des piles silencieuses, comme ceci:!
ntdll.dll 77a01f36()
[Cadres ci-dessous peuvent être incorrectes et/ou manquant, pas de symboles chargés pour ntdll.dll] ntdll.dll 77a01f36 ()
ntdll.dll! 77a2471e()
kernel32.dll! 7587339a()
ntdll.dll! 77a19ed2()
ntdll.dll! 77a19ea5()
Le lieu de L'intérêt est l'objet statique CvModule dans opencv dll. OpenCV \ 2.3.1 \ modules \ core \ src \ system.cpp:
CvModule cxcore_module(&cxcore_info);
En échec cas, je n'atteint pas son destructor, mais en bon (sans dialogue) faire.
Cette situation est-elle réellement problématique avec 0xC000004B?
Une suggestion où chercher une solution?
Merci.
Si vous utilisez des fichiers binaires OpenCV prédéfinis officiels provenant de sourceforge, vous verrez des threads TBB. –