在我的程序中的某个时刻,我想等待用户按[return]或[escape]。 这就是我所做的:
while(1)
{
Sleep(100);
if( GetAsyncKeyState( VK_RETURN ) )
{
//do something
}
if( GetAsyncKeyState( VK_ESCAPE ) )
{
//do something else
}
}
但是(仅在发布版本中)等待大约2秒后,Windows表示它没有响应,它崩溃了。 我该怎么办?
答案 0 :(得分:2)
您的应用程序是一个GUI子系统应用程序,其主线程必须定期泵送其消息队列。你没有这样做是因为你进入了一个寻找特定键状态的紧密循环。由于您没有为队列提供服务,系统会断定您的应用程序已损坏且 ghosts 您的窗口。
在我们继续如何正确行事之前,您现有的方法会以其他方式被打破。假设在睡眠期间按下并释放该键(100)。然后你错过了那个活动。或者假设您的应用不在前台。然后它响应用于其他应用的按键。
要解决此问题,您只需要让正常的消息循环处理并发送消息。当您收到相应密钥的WM_KEYDOWN消息时,您可以做出相应的反应。
以预期的方式使用消息循环不仅可以修复您在问题中观察到的行为,还可以修复我在上面描述的问题。