C++ Builder 参考手册 ➙ TThread ➙ Execute
头文件:#include <System.Classes.hpp>
命名空间: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
网友评论