我有一个追寻的错误(我认为这是一个僵局)。当我运行代码时,它挂起了,调试器没有标记出错误,因此一段时间后,我尝试按一下暂停(全部中断)按钮。调试器然后报告“该进程似乎已死锁...”。然后,我可以看到所有线程都在说EnterCriticalSection的行中停了下来,除了已经在关键部分中的那一部分。当我使用调试器查看C.S.内部的线程时,我看到一个绿色箭头,并伴随着一个指向与GetWindowText ...的一行的蓝色小圆圈,如下所示:

// stuff A
{
    GetWindowText(editwin[a].child_window_handle,existing_text,MAX_TEXT_SIZE-1);
}
// stuff B

如果将鼠标悬停在绿色箭头上,则会看到文本“这是该线程从当前函数返回时要执行的下一条语句”。现在,这让我感到难过,因为我不知道这是否意味着它卡在“stuff A”中,正等待返回或卡在GetWindowText中,并以某种方式卡在其中。 GetWindowText的参数对我来说似乎都是明智的。如果单击“进入”,我会收到消息“无法进入。该过程已被软中断”。

编辑: Material A实际上是以下语句:
if (buf_ptr != NULL)

最佳答案

您的问题是GetWindowText实际上将消息发送到另一个窗口,并等待它返回。如果该窗口由另一个正在等待关键部分的线程所有,则GetWindowText将永远等待。

您被卡在GetWindowText中,并创建了死锁。

关于c++ - 调试器问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1488037/

10-08 20:41