My Environment: Rad Studio XE4 using C++我正在开发一个使用TThread的软件。最近,我遇到了一个问题,从程序开始几天后,TThread突然被破坏。
在TThread中,线程使用Synchronize()方法更改表单的显示(例如,TLables)。我想知道这可能会引起一些问题。
我在线程中的几个部分进行日志记录,以便能够找到问题的原因。但是当我检查日志时,我只能发现突然调用了TThread的析构函数。
将FreeOnTerminate的TThread设置为true。
这个程序运行两个线程。只有一个线程突然被破坏,而另一个线程即使在问题发生后也能工作。
我正在寻找如何找出这类问题的原因。
发布于 2016-02-07 08:06:51
当我检查日志时,我只能发现突然调用了TThread的析构函数。
唯一可能发生的方式是:
FreeOnTerminate属性设置为true (您是),并且线程由于其Execute()方法退出而终止(要么因为它遇到了return语句,要么到达了其代码的末尾,或者抛出了一个未捕获的异常)。若要在线程终止时进行日志记录,可以重写其虚拟DoTerminate()方法,或向其分配OnTerminate事件处理程序。delete。如果发生这种情况,您必须记录delete调用。假设您正在将FreeOnTerminate设置为true,那么可能的罪魁祸首是Execute()由于一个不明确的异常而退出。
https://stackoverflow.com/questions/35251103
复制相似问题