Delphi 如何捕获突然破坏的TThread
我正在使用TThread开发一个软件。最近,我遇到了一个问题,在程序启动几天后,TThread突然被破坏 在TThread中,线程使用Synchronize()方法更改窗体(例如TLables)的显示。我想这可能会引起一些问题 我正在记录线程中的几个部分,以便找出问题的原因。但是当我检查日志时,我只能发现TThread的析构函数突然被调用 TThread的FreeOnTerminate设置为true 程序运行两个线程。只有一个线程被突然破坏,而另一个线程即使在问题发生后仍在工作 我正在寻找如何找出这种问题的原因 当我检查日志时,我只能发现TThread的析构函数突然被调用 唯一可能发生的方法是:Delphi 如何捕获突然破坏的TThread,delphi,c++builder,tthread,Delphi,C++builder,Tthread,我正在使用TThread开发一个软件。最近,我遇到了一个问题,在程序启动几天后,TThread突然被破坏 在TThread中,线程使用Synchronize()方法更改窗体(例如TLables)的显示。我想这可能会引起一些问题 我正在记录线程中的几个部分,以便找出问题的原因。但是当我检查日志时,我只能发现TThread的析构函数突然被调用 TThread的FreeOnTerminate设置为true 程序运行两个线程。只有一个线程被突然破坏,而另一个线程即使在问题发生后仍在工作 我正在寻找如何找
FreeOnTerminate
属性设置为true(您正在设置),并且您的线程由于其Execute()
方法退出而终止(可能是因为它遇到了return
语句,到达了其代码的末尾,或者抛出了未捕获的异常)。要记录线程是否终止,可以重写其虚拟DoTerminate()
方法,或为其分配ontTerminate
事件处理程序delete
。要记录是否发生这种情况,您必须记录delete
调用假设您正在将
FreeOnTerminate
设置为true,那么可能的罪魁祸首是Execute()
由于未捕获的异常而退出。添加madeexcept并进行更多调试并编写一些日志代码。显然你正在终止你的线程。谢谢你的评论。我不知道那个疯子。我在上写了我的日志代码。非常感谢您的回复。在我的代码中,我不会自己删除Tthread对象。TThread在软件启动时构造,在软件停止正常运行时销毁。因此,正如您所写,未捕获的异常似乎导致了这个问题。我将考虑以某种方式捕捉异常来解决这个问题(可能尝试、捕获和调试输出错误消息)。
My Environment: Rad Studio XE4 using C++