2012-07-24 41 views
6

Soy nuevo en el generador de C++ y no estoy familiarizado con el enhebrado. Estaba esperando que alguien pudiera publicar un ejemplo o apuntarme en la dirección correcta.Hilos en C++ Builder

Tengo un formulario que carga la función formShow() en C++ builder. Hace lo que yo quiero que haga mi programa, pero solo después de eso mostrará la forma real.

Para esto necesito enhebrar el formulario y el funcionamiento en segundo plano del programa. ¿Alguien puede ayudarme?

Respuesta

8

Podría ser más simple retrasar su lógica hasta después de que el evento OnShow haya salido, sin usar ningún hilo. Por ejemplo:

const UINT WM_DO_WORK = WM_USER + 1; 

void __fastcall TForm1::FormShow(TObject *Sender) 
{ 
    PostMessage(Handle, WM_DO_WORK, 0, 0); 
} 

void __fastcall TForm1::WndProc(TMessage &Message) 
{ 
    if (Message.Msg == WM_DO_WORK) 
    { 
     // do work here ... 
    } 
    else 
     TForm::WndProc(Message); 
} 

Si realmente desea enhebrar el código, puede hacerlo de esta manera:

class TMyThread : public TThread 
{ 
protected: 
    virtual void __fastcall Execute(); 
public: 
    __fastcall TMyThread(); 
}; 

__fastcall TMyThread::TMyThread() 
    : TThread(true) 
{ 
    FreeOnTerminate = true; 
    // setup other thread parameters as needed... 
} 

void __fastcall TMyThread::Execute() 
{ 
    // do work here ... 
    // if you need to access the UI controls, 
    // use the TThread::Synchornize() method for that 
} 

void __fastcall TForm1::FormShow(TObject *Sender) 
{ 
    TMyThread *thrd = new TMyThread(); 
    thrd->OnTerminate = &ThreadTerminated; 
    thrd->Resume(); 
} 

void __fastcall TForm1::ThreadTerminated(TObject *Sender) 
{ 
    // thread is finished with its work ... 
}