Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何捕获突然破坏的TThread_Delphi_C++builder_Tthread - Fatal编程技术网

Delphi 如何捕获突然破坏的TThread

Delphi 如何捕获突然破坏的TThread,delphi,c++builder,tthread,Delphi,C++builder,Tthread,我正在使用TThread开发一个软件。最近,我遇到了一个问题,在程序启动几天后,TThread突然被破坏 在TThread中,线程使用Synchronize()方法更改窗体(例如TLables)的显示。我想这可能会引起一些问题 我正在记录线程中的几个部分,以便找出问题的原因。但是当我检查日志时,我只能发现TThread的析构函数突然被调用 TThread的FreeOnTerminate设置为true 程序运行两个线程。只有一个线程被突然破坏,而另一个线程即使在问题发生后仍在工作 我正在寻找如何找

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

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

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

TThread的FreeOnTerminate设置为true

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

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

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

唯一可能发生的方法是:

  • 如果您正在将线程的
    FreeOnTerminate
    属性设置为true(您正在设置),并且您的线程由于其
    Execute()
    方法退出而终止(可能是因为它遇到了
    return
    语句,到达了其代码的末尾,或者抛出了未捕获的异常)。要记录线程是否终止,可以重写其虚拟
    DoTerminate()
    方法,或为其分配
    ontTerminate
    事件处理程序

  • 如果线程外的某段代码正在调用线程对象指针上的
    delete
    。要记录是否发生这种情况,您必须记录
    delete
    调用


  • 假设您正在将
    FreeOnTerminate
    设置为true,那么可能的罪魁祸首是
    Execute()
    由于未捕获的异常而退出。

    添加madeexcept并进行更多调试并编写一些日志代码。显然你正在终止你的线程。谢谢你的评论。我不知道那个疯子。我在上写了我的日志代码。非常感谢您的回复。在我的代码中,我不会自己删除Tthread对象。TThread在软件启动时构造,在软件停止正常运行时销毁。因此,正如您所写,未捕获的异常似乎导致了这个问题。我将考虑以某种方式捕捉异常来解决这个问题(可能尝试、捕获和调试输出错误消息)。
    My Environment: Rad Studio XE4 using C++