Freeze à la libération d'un Thread
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 :
Code:
1 2 3 4 5 6
| void __fastcall TSDIAppForm::TBRefreshClick(TObject *Sender)
{
tT = NULL;
tT = new TTest(false);
tT->OnTerminate = TTestFin;
} |
La méthode TTestFin est la suivante :
Code:
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);
}
} |
J'ai volontairement inséré une boîte de message avant et après.
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.