如何捕获突然破坏的TThread

How to capture suddenly destructed TThread

My Environment: Rad Studio XE4 using C++

我正在开发一个使用 TThread 的软件。最近遇到一个问题,程序启动几天后TThread突然被破坏

在 TThread 中,线程使用 Synchronize() 方法更改表单(例如 TLables)的显示。我想知道这可能会导致一些问题。

我正在线程中的几个部分进行记录,以便找出问题的原因。但是查看日志,却发现突然调用了TThread的析构函数。

TThread 的 FreeOnTerminate 设置为 true。

程序运行两个线程。只有一个线程突然被破坏,另一个线程即使在问题发生后仍在工作。

我正在寻找如何找出此类问题的原因。

when I check the log, I can only find that the destructor of the TThread is suddenly called.

唯一可能发生的方式是:

  1. 如果您将线程的 FreeOnTerminate 属性 设置为 true(您确实如此)并且您的线程由于其 Execute() 方法退出(要么因为它遇到了 return 语句,到达了它的代码末尾,或者抛出了一个你没有捕捉到的异常)。要记录线程是否正在终止,您可以覆盖其虚拟 DoTerminate() 方法,或为其分配一个 OnTerminate 事件处理程序。

  2. 如果线程外的某些代码正在线程对象指针上调用 delete。要记录是否发生这种情况,您必须记录您的 delete 呼叫。

鉴于您 FreeOnTerminate 设置为 true,那么可能的罪魁祸首是 Execute() 由于未捕获的异常而退出。