gpt4 book ai didi

multithreading - Delphi 2006 - 优雅地终止线程并仍然触发 OnTerminate 处理程序的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 15:43:52 28 4
gpt4 key购买 nike

我有一个线程有时会由于永远不会返回的 DLL 调用而卡住(我怀疑)。在一般情况下,当您调用像 Indy 这样的阻塞例程时,是否有一种方法可以通过触发线程 OnTerminate 处理程序来从中恢复?如果我调用 TerminateThread 会发生这种情况吗?

最佳答案

TerminateThread() 是立即强力终止。它不会让 OnTerinaate 事件触发。 OnTerminate 可以触发的唯一方法是线程的 Execute() 方法通过正常方式退出,无论是优雅地还是通过引发未捕获的异常(这将设置线程的 FatalExpection 属性)。

特别是在 Indy 的情况下,可以通过断开套接字与另一个线程的上下文的连接来中止阻塞套接字操作。对于阻塞 DLL 函数来说,这通常是不可能的,除非它们在 API 中公开了此类功能。

关于multithreading - Delphi 2006 - 优雅地终止线程并仍然触发 OnTerminate 处理程序的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7863544/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com