TThread::Execute - C++ Builder

C++ Builder 参考手册 ➙ TThread ➙ Execute


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

virtual void __fastcall Execute(void) = 0;

System::Classes::TThread::Execute 是 System::Classes::TThread 的纯虚成员函数,是这个线程类的线程函数,子类必须重载实现这个函数。

参数:

无。

返回值:

无。

  • Execute 方法是这个线程类的线程函数,是纯虚函数,子类必须重载和实现;
  • 如果构造函数的参数为 false,或者没有参数,线程对象创建出来就开始执行 Execute 方法;
  • 如果构造函数的参数为 true,线程对象创建出来的时候线程是被挂起状态,没有开始执行 Execute 方法,需要调用 Start 方法开始执行 Execute 方法;
  • 如果 FreeOnTerminate 属性置为 true,Execute 方法执行结束,线程就会被销毁,所以构造函数的参数要为 true 即创建出来的时候线程挂起,然后用 Start 方法开始执行,调用 Start 方法之后,就不要在 Execute 方法之外的任何地方调用类的成员了,除非确认这个对象还没被销毁。

例子:点击按钮 Button1 创建并且执行线程,在线程里面,每隔 200 毫秒在 Form1->Label1 上依次输出 1 ~ 10 的整数,线程结束时线程对象自动销毁。

由于在线程里面,不能直接处理显示,所以用 Synchronize 方法调用处理显示的函数,这样处理显示的函数会同步在主线程里面运行。

class TTestThread : public System::Classes::TThread
{
public:
    __fastcall TTestThread();
protected:
    void __fastcall Execute(void);
private:
    int _iProgress;
    void __fastcall ShowProgress(void);
};

__fastcall TTestThread::TTestThread()
    : System::Classes::TThread(true)
{
    FreeOnTerminate = true;
}

void __fastcall TTestThread::Execute(void)
{
    for(_iProgress=1; _iProgress<=10; _iProgress++)
    {
        Synchronize(ShowProgress);
        Sleep(200);
    }
}

void __fastcall TTestThread::ShowProgress(void)
{
    Form1->Label1->Caption = _iProgress;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    TTestThread *lpThread = new TTestThread;
    lpThread->Start();
}
Form1 上放一个 Label1 和一个按钮 Button1

运行结果:

运行结果

参考:

  • System::Classes::TThread::Synchronize
  • System::Classes::TThread::Start
  • System::Classes::TThread::Terminate
  • System::Classes::TThread::Terminated
  • System::Classes::TThread::OnTerminate
  • System::Classes::TThread::FatalException
  • System::Classes::TThread::FreeOnTerminate
  • System::Classes::TThread::TThread
  • System::Classes::TThread
  • System::TObject
  • VCL 类继承关系

C++ Builder 参考手册 ➙ TThread ➙ Execute

你可能感兴趣的:(TThread::Execute - C++ Builder)