My Environment: Rad Studio XE4 using C++

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

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

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

TThread 的 FreeOnTerminate 设置为 true。

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

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

最佳答案



唯一可能发生的 方式是:

  • 如果您将线程的 FreeOnTerminate 属性设置为 true(您是)并且您的线程由于其 Execute() 方法退出而终止(因为它遇到了 return 语句、到达其代码的末尾,或者抛出了一个您没有的异常捕获)。要记录线程是否终止,您可以覆盖其虚拟 DoTerminate() 方法,或为其分配 OnTerminate 事件处理程序。
  • 如果线程外的某段代码正在调用线程对象指针上的 delete。要记录是否发生这种情况,您必须记录您的 delete 调用。

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

    关于delphi - 如何捕获突然被破坏的TThread,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35251103/

    10-13 04:15