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 : 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;
}
La méthode TTestFin est la suivante :
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);
	}
}
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.