Bonjour,
Je travaille sous C++ Builder 2007.
J'ai le problème suivant : dès que je libère l'allocation mémoire d'un Thread qui est terminé, mon application (TSDIAppForm) freeze.
Le code est très simple volontairement, il me sert de jeu de test :
La méthode TTestFin est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void __fastcall TSDIAppForm::TBRefreshClick(TObject *Sender) { tT = NULL; tT = new TTest(false); tT->OnTerminate = TTestFin; }
J'ai volontairement inséré une boîte de message avant et après.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void __fastcall TSDIAppForm::TTestFin(TObject *Sender) { try { Application->MessageBox("Fin du Thread - Avant libération", "Info", MB_OK); if (tT != NULL) { delete tT; tT = NULL; } Application->MessageBox("Après libération", "Info", MB_OK); } catch (Exception &e) { Application->MessageBox("Exception TTestFin", "Exception", MB_OK); } }
Le premier message apparaît bien, pas la seconde.
Après un débogage pas à pas, je me suis aperçu que c'était la commande delete tT qui provoquait un freeze de l'application.
A noter, aucune exception n'est levée.
Partager