Euh ! tu te contredis ! tu n'as pas vu la différence ?
Sinon, ton thread, il est un peu court non ?
Ta fenêtre s'affiche et pouf le thread, il s'arrête ! 
ça doit faire mal, la fenêtre est encore là ???
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | void __fastcall TMonThread::Execute()
{
   Form2-> Show();
   try
   {
      while (BooleanGlobalQuiDitQueLeTraitementTourne) // pas besoin de SC pour ce genre de valeur
      {
        PumpMessages(); // Moins brutal que Application.ProcessMessages(); // A Tester SANS ! 
        Sleep(1);
      }
   }
   __finally
   {
     Form2-> Hide();
   }
} | 
 Désolé, je n'ai pas encore fait ça en C++, donc voici ce que j'ai déjà fait en Delphi
Ajoute PumpMessages si besoin !
	Code:
	
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | procedure PumpMessages;
var
   Msg: TMsg;
begin
     while PeekMessage(Msg, 0, 0, 0, pm_Remove) do begin
           TranslateMessage(Msg);
           DispatchMessage(Msg);
     end;
end; | 
 Et puis Show ce n'est pas bloquant !
Tu peux l'utiliser SANS thread !
Autre Question :
Ton traitement est une boucle que tu as faite ou un traitement bloquant extérieur (SQL de plusieurs minutes, Exe externe, DLL, ...) ?
Tu devrais lancer le traitement dans le thread secondaire et laisser la progression dans le thread principal (avec PostThreadMessage tu peux faire des choses sympas !)