首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕捉突然破坏的TThread

如何捕捉突然破坏的TThread
EN

Stack Overflow用户
提问于 2016-02-07 07:55:40
回答 1查看 124关注 0票数 3
代码语言:javascript
复制
My Environment: Rad Studio XE4 using C++

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

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

我在线程中的几个部分进行日志记录,以便能够找到问题的原因。但是当我检查日志时,我只能发现突然调用了TThread的析构函数。

将FreeOnTerminate的TThread设置为true。

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

我正在寻找如何找出这类问题的原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-07 08:06:51

当我检查日志时,我只能发现突然调用了TThread的析构函数。

唯一可能发生的方式是:

  1. 如果将线程的FreeOnTerminate属性设置为true (您是),并且线程由于其Execute()方法退出而终止(要么因为它遇到了return语句,要么到达了其代码的末尾,或者抛出了一个未捕获的异常)。若要在线程终止时进行日志记录,可以重写其虚拟DoTerminate()方法,或向其分配OnTerminate事件处理程序。
  2. 如果线程外部的代码正在线程对象指针上调用delete。如果发生这种情况,您必须记录delete调用。

假设您正在将FreeOnTerminate设置为true,那么可能的罪魁祸首是Execute()由于一个不明确的异常而退出。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35251103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档