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/