如何捕获突然破坏的TThread
How to capture suddenly destructed TThread
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()
由于未捕获的异常而退出。
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()
由于未捕获的异常而退出。