C++ Builder 参考手册 ➙ System::Classes ➙ TThread ➙ TerminatedSet
头文件:#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;
}
}
相关:
- System::Classes::TThread::Terminate
- System::Classes::TThread::Terminated
- System::Classes::TThread::FreeOnTerminate
- System::Classes::TThread::Finished
- System::Classes::TThread::Started
- System::Classes::TThread::Execute
- System::Classes::TThread::WaitFor
- System::Classes::TThread
- System::TObject
- VCL 类继承关系
C++ Builder 参考手册 ➙ System::Classes ➙ TThread ➙ TerminatedSet
网友评论