由于DLL调用永远不会返回,我有一个线程有时会冻结(我怀疑)。在一般情况下,如果您调用了像Indy这样的阻塞例程,那么是否有一种方法可以通过线程OnTerminate处理程序触发来恢复?如果我调用TerminateThread会发生这种情况吗?
答案 0 :(得分:9)
TerminateThread()
是一种立即强力终止。它不会让OnTerminaate
事件触发。 OnTerminate
可以触发的唯一方法是线程的Execute()
方法通过正常方式退出,无论是优雅还是通过引发未捕获的异常(将设置线程的FatalExpection
属性)。 / p>
在Indy的情况下,可以通过断开套接字与另一个线程的上下文来中止阻塞套接字操作。这通常不会阻止DLL函数,除非它们在API中公开这种功能。