gpt4 book ai didi

c++ - 当 Execute() 在 C++ Builder 中终止时,不调用 OnTerminate() 方法

转载 作者:太空宇宙 更新时间:2023-11-04 13:40:42 25 4
gpt4 key购买 nike

我正在使用 TThread 来填充 SQL 数据库。当这个线程结束时,必须在主窗体上启用一些对象。

我希望这段代码位于 OnTerminate() 事件中。

然而,当 Execute() 方法结束时,OnTerminate() 不会被调用。

为什么不叫这个?我是否遗漏或忘记了什么?

这是主窗体中的代码:

void __fastcall TAF_Calc_Form::Button_LUClick(TObject *Sender)
{
Button_LU->Enabled = false;

TUrenThread* ut = new TUrenThread(true);
ut->FreeOnTerminate = true;
ut->Start();
}

这是 Execute() 代码:

void __fastcall TUrenThread::Execute()
{

Synchronize(&MoveFirst_AD);

while (!AF_Calc_Form->PvQ_AfleverD->Eof)
{

//code executes here
};
}

这是 OnTerminate() 方法:

void __fastcall TUrenThread::OnTerminate()
{
AF_Calc_Form->Button_LU->Enabled = false;

}

最佳答案

TThread 没有OnTerminate() 方法。它有一个 DoTerminate() 虚方法,可触发 OnTerminate 事件处理程序。您没有为 OnTerminate 事件分配处理程序,也没有覆盖 DoTerminate() 方法。这就是您的代码未被调用的原因。

试试这个:

void __fastcall TAF_Calc_Form::Button_LUClick(TObject *Sender)
{
Button_LU->Enabled = false;

TUrenThread* ut = new TUrenThread(true);
ut->FreeOnTerminate = true;
ut->OnTerminate = &UrenThreadTerminated; // <-- add this
ut->Start();
}

void __fastcall TAF_Calc_Form::UrenThreadTerminated(TObject *Sender)
{
// shouldn't this be assigning true instead of false?
Button_LU->Enabled = false;
}

关于c++ - 当 Execute() 在 C++ Builder 中终止时,不调用 OnTerminate() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27705631/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com