C++ Builder 参考手册 ➙ TThread ➙ OnTerminate
头文件:#include <System.Classes.hpp>
命名空间:System::Classes
类:TThread
访问权限:public:
事件定义:
__property TNotifyEvent OnTerminate = { read = FOnTerminate, write = FOnTerminate };
System::Classes::TThread::OnTerminate 是 System::Classes::TThread 的事件,当线程结束执行时产生的事件。
参数:
Sender:产生事件的对象。
返回值:
无。
- 当线程结束执行时产生的事件。当产生这个事件时,Execute 方法已经结束;
- 这个事件是被同步在主线程执行的,线程内部调用了 DoTerminate 方法产生的这个事件,这个方法是通过调用 Synchronize 方法让事件同步在主线程的;
- 可以在这个事件里面检查 FatalException 属性的值来判断线程是否异常结束;
- 如果不希望线程异常结束,需要在线程里面用 try .. catch 捕获异常,异常被捕获了,就不会异常结束了。
例:在线程 Execute 方法里面抛出异常,线程异常结束
在 .h 文件的 TForm1 类的 private: 里面添加线程 OnTerminate 事件调用的函数:
private: // User declarations
void __fastcall TestThreadTerminate(TObject *Sender);
线程类和在点击按钮 Button1 时启动线程:
class TTestThread : public System::Classes::TThread
{
public:
__fastcall TTestThread();
protected:
void __fastcall Execute(void);
};
__fastcall TTestThread::TTestThread()
: System::Classes::TThread(true)
{
FreeOnTerminate = true;
}
void __fastcall TTestThread::Execute(void)
{
for(int i=0; i<10; i++)
{
Sleep(200);
}
throw Exception("测试线程抛出异常--玄坴");
}
void __fastcall TForm1::TestThreadTerminate(TObject *Sender)
{
TThread *lpThread = dynamic_cast<TThread *>(Sender);
if(lpThread)
{
if(lpThread->FatalException)
{
Exception *lpException = dynamic_cast<Exception *>(lpThread->FatalException);
if(lpException)
ShowMessage(L"线程异常结束,错误信息:\r\n" + lpException->Message);
else
ShowMessage(L"线程异常结束,异常类:\r\n" + lpThread->FatalException->ClassName());
}
else
{
ShowMessage(L"线程正常结束");
}
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TTestThread *lpThread = new TTestThread;
lpThread->OnTerminate = TestThreadTerminate; // 线程的 OnTerminate 事件调用 Form1 的 TestThreadTerminate 方法
lpThread->Start();
}
运行结果:
在线程里面抛出异常,线程异常结束的运行结果
相关:
- System::Classes::TThread::Execute
- System::Classes::TThread::Synchronize
- System::Classes::TThread::DoTerminate
- System::Classes::TThread::FatalException
- System::Classes::TThread::FreeOnTerminate
- System::Classes::TThread::Terminate
- System::Classes::TThread::Terminated
- System::Classes::TThread::CheckTerminated
- System::Classes::TThread
- System::TObject
- VCL 类继承关系
C++ Builder 参考手册 ➙ TThread ➙ OnTerminate