3
My Environment: Rad Studio XE4 using C++

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

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

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

TThread 的 FreeOnTerminate 设置为 true。

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

我正在寻找如何找出这种问题的原因的方法。

4

1 回答 1

7

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

可能发生的唯一方法是:

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

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

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

于 2016-02-07T08:06:51.277 回答