Visual Studio超时

时间:2016-10-22 18:05:44

标签: visual-studio

当我调试我的程序时,它包括多次循环遍历向量中的数千个条目,它只是冻结程序但不提供任何错误消息。 Visual Studio是否有某种我正在经历的自动超时?

1 个答案:

答案 0 :(得分:0)

检查可能是您的程序进入无限循环或执行一些繁重的任务,使您的UI无响应(如果您有Windows窗体)。由于您正在调试此程序,那么为什么不在代码中设置断点并检查程序导致问题的位置。

是的,Visual Studio没有时间,但对于程序窗口。这称为挂起状态。    当应用程序(或更确切地说,线程)在桌面上创建窗口时,它会与桌面窗口管理器(DWM)签订隐式合同,以及时处理窗口消息。 DWM将消息(键盘/鼠标输入和来自其他窗口的消息以及它们自身)发布到特定于线程的消息队列中。线程通过其消息队列检索和分派这些消息。如果线程不通过调用GetMessage()来服务队列,则不处理消息,并且窗口挂起:它既不能重绘也不能接受来自用户的输入。操作系统通过将计时器附加到消息队列中的挂起消息来检测此状态。如果在5秒内未检索到消息,则DWM将声明窗口挂起。您可以通过IsHungAppWindow()API查询此特定窗口状态。

检测只是第一步。此时,用户仍然无法终止应用程序 - 单击X(关闭)按钮将导致WM_CLOSE消息,该消息将像任何其他消息一样卡在消息队列中。桌面窗口管理器通过无缝隐藏然后用显示原始窗口的先前客户区域的位图的“ghost”副本替换挂起的窗口(并向标题栏添加“Not Responding”)来辅助。只要原始窗口的线程不检索消息,DWM就会同时管理两个窗口,但允许用户仅与幻影副本进行交互。使用此重影窗口,用户只能移动,最小化,并且 - 最重要的是 - 关闭无响应的应用程序,但不能更改其内部状态。

以下链接中写了一篇不错的文章。 How program window works