问题
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?
回答1:
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 ...
}
来源:https://stackoverflow.com/questions/11639859/threads-in-c-builder