我在 FMX 和 VCL 应用程序中使用 C++Builder 10.2.1 时遇到了同样的问题。
如果我启用 CodeGuard,我会在应用程序退出时出现内存泄漏。
我有一个TThread
withOnTerminate
处理程序:如果我在这个处理程序中放置一个断点,当我关闭程序时它永远不会被调用。
如果我放入CheckSynchronize()
主申请表的析构函数,问题仍然存在。
我的解决方案是在主窗体的析构函数中出现这样的“可怕”循环:
__fastcall TForm3::~TForm3(void) {
for(int i = 0; i < 10; i++) {
Sleep(1);
CheckSynchronize();
}
}
此解决方案不是确定性的,但可以在您的应用程序中以调试模式使用以避免 CodeGuard 错误消息。
另一种解决方案是使用WaitFor()
函数 ifMyThread
是一个TThread
对象:
MyThread = new MyThreadClass();
并且DeleteThisTh()
是这个类的一个方法,我们可以在里面等待终止的线程DeleteThisTh()
:
void MyThreadClass::DeleteThisTh(void) {
Terminate();
WaitFor();
delete this;
}
在这种情况OnTerminate
下,我可以清理我的物品。记笔记:
delete this
在之后调用OnTerminate
;
DeleteThisTh()
住在主线程中;