如何捕获突然被毁坏的TThread

时间:2016-02-07 07:55:41

标签: delphi c++builder tthread

My Environment: Rad Studio XE4 using C++

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

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

我正在记录线程中的几个部分,以便我可以找到问题的原因。但是当我检查日志时,我只能发现突然调用了TThread的析构函数。

TThread的FreeOnTerminate设置为true。

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

我正在寻找如何解决这类问题的原因。

1 个答案:

答案 0 :(得分:7)

  

当我查看日志时,我只能发现突然调用了TThread的析构函数。

可能发生的唯一方式是:

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

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

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