0

在我的程序中的某个时刻,我想等待用户按 [return] 或 [escape]。这就是我所做的:

while(1)
{
    Sleep(100);
    if( GetAsyncKeyState( VK_RETURN ) )
    {
        //do something
    }
    if( GetAsyncKeyState( VK_ESCAPE ) )
    {
        //do something else 
    }   
}

但是(仅在发布版本中)等待大约 2 秒后,Windows 说它没有响应,并且它崩溃了。我应该怎么办?

4

1 回答 1

2

您的应用程序是一个 GUI 子系统应用程序,它的主线程必须定期抽取它的消息队列。您没有这样做,因为您进入了一个寻找特定关键状态的紧密循环。因为您不为队列提供服务,所以系统会断定您的应用程序已损坏并显示您的窗口。

在我们继续讨论如何正确处理之前,您现有的方法在其他方面被打破了。假设在 Sleep(100) 期间按下并释放该键。那你就错过了那个事件。或者假设您的应用不在前台。然后它响应用于其他应用程序的按键。

要解决这个问题,您只需要让您的正常消息循环处理并发送消息。当您收到相应键的 WM_KEYDOWN 消息时,您可以做出相应的反应。

以预期的方式使用消息循环不仅可以解决您在问题中观察到的行为,还可以解决我上面描述的问题。

于 2013-08-13T19:45:42.033 回答