Hola, tengo un problema con un hilo que he creado. Paso a explicarme.
Primero cree el proyecto y le puse un boton para que ejecute mi hilo:
Unit1.h:
Código:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <Clipbrd.hpp>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "HiloDBG.cpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "DbgCLS"
#pragma resource "*.dfm"
TFormPrincipal *FormPrincipal;
HDebugger *HiloDebugger;
__fastcall TFormPrincipal::TFormPrincipal(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFormPrincipal::ButtonDesencriptarClick(TObject *Sender)
{
//Creamos el hilo del debugger
HiloDebugger = new HDebugger(false);
}
//---------------------------------------------------------------------------
Luego en el HiloDBG.cpp tengo esto:
Código:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "HiloDBG.h"
#include "Unit1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall HDebugger::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------
__fastcall HDebugger::HDebugger(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall HDebugger::Execute()
{
//---- Place thread code here ----
Synchronize(ActualizarDatos);
//Synchronize((TThreadMethod)&ActualizarDatos);
}
//---------------------------------------------------------------------------
void __fastcall HDebugger::ActualizarDatos(void)
{
FormPrincipal->Caption = "Actualizado desde el hilo";
}
y el HiloDBG.h:
Código:
#ifndef HiloDBGH
#define HiloDBGH
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class HDebugger : public TThread
{
private:
protected:
void __fastcall ActualizarDatos(void);
void __fastcall Execute();
public:
__fastcall HDebugger(bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif
El problema es que al intentar ejecutarse la linea que cambia el Caption del form pues da la siguiente excepcion:
¿Alguna idea de que puede estar pasando?