C++编译器中的线程

Threads in C++ builder

本文关键字:线程 编译器 C++      更新时间:2023-10-16

我是c++构建器的新手,不熟悉线程,我希望有人能发布一个例子或为我指明正确的方向。

我有一个在c++builder中加载formShow()函数的表单。它做我想让我的程序做的事情,但只有在那之后,它才会显示实际的形式

为此,我需要线程的形式和后台运行的程序。有人能帮我吗?

将逻辑延迟到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 ...
}