加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C构建器中的线程

发布时间:2020-12-16 03:35:29 所属栏目:百科 来源:网络整理
导读:我是c的新手,并且不熟悉线程我希望有人可以发布一个例子或指出我正确的方向. 我有一个窗体,它在c builder中加载formShow()函数.它做我想要我的程序做的事情,但只有在那之后它才会显示实际的表格. 为此我需要线程化程序的表单和后台运行.任何人都可以帮助我吗
我是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);
}

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 ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读