ros*_*mcm 3 windows delphi winapi multithreading deadlock
如果我有一个应用程序正在创建执行其工作然后退出的线程,并且一个或多个线程陷入死锁(可能不是我自己的错!),是否有一种方法可以通过编程方式强制其中一个线程超过可能被卡住的WaitForSingleObject,从而解决死锁?
我不一定要终止线程,我只想让它继续前进(从而允许线程"优雅地"退出.
(是的,我知道这听起来像是我之前的问题Delphi 2006的重复- 什么是优雅地杀死一个线程并仍然使用OnTerminate处理程序的最佳方法?但是情况略有不同 - 我在这里问的是有可能使WaitForSingleObject (Handle, INFINTE)行为像a WaitForSingleObject (Handle, ItCantPossiblyBeWorkingProperlyAfterThisLong)).
请温柔地对待我.
*更多信息*
问题不一定在我有源代码的代码中.实际情况是基于线程的串行COM端口库(AsyncFree).当端口基于USB时,库在关闭端口时创建的两个线程之间似乎存在死锁.我已经在这个论坛上详细讨论了这个问题.我确实将其中一个WaitForSingleObject调用重新编码为不是无限的,并且解决了这个死锁,但是后来在线程关闭序列中出现了另一个,这次是在Delphi TThread.Destroy例程中.
所以我的理由很简单:当我的线程死锁时,如果可以,我会修复代码.如果我不能,或者看起来我不知道,我只想让线程完成.我不一定很漂亮.我不能让我的应用程序窒息.
您可以WaitForSingleObject通过关闭它(从某个其他线程)来使用无效的句柄.在这种情况下WaitForSingleObject应该返回WAIT_FAILED并且你的线程将被"移动"
| 归档时间: |
|
| 查看次数: |
1044 次 |
| 最近记录: |