Delphi 2006- 优雅地终止线程并触发OnTerminate事件的最佳方法是什么?

3

我有一个线程,有时会因为DLL调用没有返回而冻结(我怀疑)。在一般情况下,如果您调用像Indy这样的阻塞例程,是否有一种从中恢复的方法,以便线程OnTerminate处理程序触发?如果我调用TerminateThread,会发生这种情况吗?


1
这听起来更像是老式的死锁问题,很可能是由于您的线程代码导致的。 - David Heffernan
1个回答

9
TerminateThread() 是一种立即的强制终止方法,它不会触发 OnTerminate 事件。只有当线程的 Execute() 方法通过正常方式退出时(无论是优雅地退出还是引发未捕获异常(这将设置线程的 FatalExpection 属性)),OnTerminate 才能触发。
对于 Indy,阻塞套接字操作可以通过将套接字从另一个线程的上下文中断开来中止。除非阻塞 DLL 函数在其 API 中公开了此类功能,否则通常不可能实现这种操作。

这真的是“为了另一个线程的上下文”吗?还是你的意思是“从另一个线程的上下文中”?如果你的意思是“为”,那么是否涉及TIdContext,你会如何处理它? - Marjan Venema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接