Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Threads in C++ builder [closed]

Tags:

c++

c++builder

I am new to c++ builder and unfamiliar with the threading I was hoping someone could post an example or point me in the right direction.

I have a form which loads the formShow() function in c++ builder. It does what I want my program to do but only after that will it display the actual form.

For this i need to thread the form and the background running of the program. Can anyone help me atall?

like image 579
Amy L Avatar asked Jul 24 '12 21:07

Amy L


1 Answers

It might be simplier to just delay your logic until after the OnShow event has exited, without using a thread at all. For example:

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);
}

If you really want to thread the code, you can do it like this:

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 ...
}
like image 175
Remy Lebeau Avatar answered Oct 31 '22 17:10

Remy Lebeau