gpt4 book ai didi

windows - 是否可以推进死锁线程?卡在 WaitForSingleObject

转载 作者:可可西里 更新时间:2023-11-01 14:42:07 28 4
gpt4 key购买 nike

如果我有一个正在创建线程的应用程序,这些线程完成它们的工作然后退出,并且一个或多个线程使自己陷入死锁(可能不是我自己的错!),是否有一种方法可以通过编程方式强制其中一个线程前进到它可能卡住的 WaitForSingleObject,从而解决死锁?

我不一定要终止线程,我只是想让它继续前进(从而允许线程“优雅地”退出)。

(是的,我知道这听起来像是我之前的问题 Delphi 2006 - What's the best way to gracefully kill a thread and still have the OnTerminate handler fire? 的重复,但情况略有不同 - 我在这里问的是是否有可能制作 WaitForSingleObject (Handle, INFINTE ) 表现得像一个 WaitForSingleObject (Handle, ItCantPossiblyBeWorkingProperlyAfterThisLong)

请对我温柔一点

* 更多信息 *

问题不一定出在我有源代码的代码中。实际情况是基于线程的串行COM端口库(AsyncFree)。当端口是基于 USB 时,库在关闭端口时创建的两个线程之间似乎存在死锁。我已经在 this forum 中对此进行了详细讨论。 .我确实将其中一个 WaitForSingleObject 调用重新编码为不是无限的,这解决了那个死锁,但后来另一个出现在线程关闭序列中,这次是在 Delphi TThread.Destroy 例程中。

所以我这样做的理由很简单:当我的线程死锁时,我会尽可能地修复代码。如果我做不到,或者出现了我不知道的情况,我只想让线程结束。我不必很漂亮。我不能让我的应用窒息。

最佳答案

您可以通过关闭它(从其他线程)使 WaitForSingleObject 中使用的句柄无效。在这种情况下,WaitForSingleObject 应该返回 WAIT_FAILED 并且您的线程将“继续”

关于windows - 是否可以推进死锁线程?卡在 WaitForSingleObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8551969/

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