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.
唯一可能发生的方式是:
如果您将线程的
FreeOnTerminate
属性设置为 true(您确实如此),并且您的线程由于其Execute()
方法退出而终止(或者因为它遇到了return
语句、到达了代码末尾,或者引发了您未捕获的异常)。要记录线程是否正在终止,您可以重写其虚拟DoTerminate()
方法,或为其分配一个OnTerminate
事件处理程序。如果线程外部的某些代码正在线程对象指针上调用
delete
。要记录是否发生这种情况,您必须记录delete
调用。
鉴于您将FreeOnTerminate
设置为true,那么可能的罪魁祸首是Execute()
由于未捕获的异常而退出。
关于delphi - 如何捕获突然破坏的TThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35251103/