Hola amigos, aqui otra vez con problemas

.
El problema que tengo ahora es que estoy probando el manejo de un hilo y si uso Terminate() y FreeOnTerminate = true le doy y se termina el hilo y se destruye pero, si uso Suspend() el hilo no se detiene y sigue trabajando. Probé a poner FreeOnTerminate = false y usar WaitFor() despues de Suspend(), Resume(), o Terminate() pero me encuentro con que ejecuta cualquiera de esas lineas y llega al WaitFor() y se queda congelado todo, tanto el interfaz como el hilo.
No se por qué pasa esto y ademas tuve que poner un Application->ProcessMessage() para que procese los mensajes y me deje trabajar sobre el form para poder pulsar los botones ya que si no es así no me deja hacer nada y el form se congela mientras corre el hilo ¿no se supone que los hilos son entre otras cosas para evitar eso?
Es muy cortito asi que lo pongo aquí:
THilo.cpp:
Código:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "THilo.h"
#include "Unit1.h"
#pragma package(smart_init)
__fastcall THilo::THilo(bool CreateSuspended)
: TThread(CreateSuspended)
{
Priority = tpNormal;
FreeOnTerminate = false;
}
//---------------------------------------------------------------------------
void __fastcall THilo::Execute()
{
Synchronize(Bucle);
}
//---------------------------------------------------------------------------
void __fastcall THilo::Bucle()
{
while(!Terminated)
{
Form1->Caption = Form1->Caption.ToDouble() + 1;
Application->ProcessMessages();
Sleep(1000);
}
}
THilo.h:
Código:
//---------------------------------------------------------------------------
#ifndef THiloH
#define THiloH
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class THilo : public TThread
{
private:
protected:
void __fastcall Execute();
void __fastcall THilo::Bucle();
public:
__fastcall THilo(bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif
Unit1.cpp:
Código:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "THilo.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
THilo *Hilo;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonCrearClick(TObject *Sender)
{
Hilo = new THilo(false);
ButtonCrear->Enabled = false;
ButtonPausa->Enabled = true;
ButtonAbortar->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonContinuarClick(TObject *Sender)
{
Hilo->Resume();
Hilo->WaitFor();
ButtonContinuar->Enabled = false;
ButtonPausa->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonPausaClick(TObject *Sender)
{
Hilo->Suspend();
Hilo->WaitFor();
ButtonContinuar->Enabled = true;
ButtonPausa->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonAbortarClick(TObject *Sender)
{
Hilo->Terminate();
Hilo->WaitFor();
delete Hilo;
ButtonCrear->Enabled = true;
ButtonPausa->Enabled = false;
ButtonContinuar->Enabled = false;
ButtonAbortar->Enabled = false;
}
//---------------------------------------------------------------------------
Ya digo que es una prueba y que luego ya colocaria bien cosas que tengo como global y cosas asi. El caption del Form1 es 0.
Estas cosas no me pasan usando las Apis de windows ResumeThread(), SuspendThread(), CreateThread(), y TerminateThread() ¿por que pasa con el que nos da Borland?