美文网首页
TThread::TerminatedSet - C++ Bui

TThread::TerminatedSet - C++ Bui

作者: 玄坴 | 来源:发表于2020-06-24 10:58 被阅读0次

    C++ Builder 参考手册 ➙ System::Classes ➙ TThreadTerminatedSet


    头文件:#include <System.Classes.hpp>
    命名空间:System::Classes
    类:TThread
    访问权限:protected:
    函数原型:

    virtual void __fastcall TerminatedSet(void);
    

    TerminatedSet 是 System::Classes::TThread 的成员函数,当 Terminated 属性变为 true 时产生的事件,线程需要尽快结束执行。

    参数:

    无。

    返回值:

    无。

    • 使用 Terminate 方法 Terminated 属性先置为 true,然后调用 TerminatedSet 方法,可以在 TerminatedSet 方法里面写让线程尽快停下来的程序代码,可以参考本文后面的例子。

    例子:在线程里面每隔 1 秒调用一次 Form1->Label1 显示的数字加 1,点击 Button1 按钮开始线程,点击 Button2 按钮结束线程。

    • 使用 System::Syncobjs::TEvent 事件,每次等待这个事件超时 (1秒) 执行一次显示 SetLabelValue,如果产生了这个事件,即在 TerminatedSet 里面调用了事件的 SetEvent 方法,事件的 WaitFor 方法结束等待,并且立即结束执行线程。
    class TTestThread : public System::Classes::TThread
    {
    private:
        System::Syncobjs::TEvent *lpEvent;
        void __fastcall SetLabelValue(void)
        {
            Form1->Label1->Caption = StrToIntDef(Form1->Label1->Caption,0) + 1;
        }
    protected:
        void __fastcall Execute(void)
        {
            while(!Terminated)
            {
                Synchronize(SetLabelValue);
                if(lpEvent->WaitFor(1000)==wrSignaled)
                    break;
            }
        }
        void __fastcall TerminatedSet(void)
        {
            lpEvent->SetEvent();
        }
    public:
        __fastcall TTestThread()
        {
            lpEvent = new System::Syncobjs::TEvent(false);
        }
        __fastcall ~TTestThread()
        {
            delete lpEvent;
        }
    };
    
    TTestThread *lpTestThread = NULL;
    
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        if(!lpTestThread)
        {
            lpTestThread = new TTestThread;
        }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
        if(lpTestThread)
        {
            lpTestThread->Terminate();
            lpTestThread->WaitFor();
            delete lpTestThread;
            lpTestThread = NULL;
        }
    }
    

    相关:


    C++ Builder 参考手册 ➙ System::Classes ➙ TThreadTerminatedSet

    相关文章

      网友评论

          本文标题:TThread::TerminatedSet - C++ Bui

          本文链接:https://www.haomeiwen.com/subject/rlrlohtx.html