我是 c++ builder 的新手,不熟悉线程,我希望有人可以发布示例或指出正确的方向。
我有一个formShow()
在 c++ builder 中加载函数的表单。它做了我想让我的程序做的事情,但只有在那之后它才会显示实际的表单。
为此,我需要线程化程序的表单和后台运行。任何人都可以帮助我吗?
我是 c++ builder 的新手,不熟悉线程,我希望有人可以发布示例或指出正确的方向。
我有一个formShow()
在 c++ builder 中加载函数的表单。它做了我想让我的程序做的事情,但只有在那之后它才会显示实际的表单。
为此,我需要线程化程序的表单和后台运行。任何人都可以帮助我吗?
将逻辑延迟到OnShow
事件退出之后可能更简单,根本不使用线程。例如:
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);
}
如果你真的想线程化代码,你可以这样做:
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 ...
}