我正在尝试用一个控制台制作一个事件驱动程序,该控制台显示自程序启动以来的时钟时间。
我创建了一个函数:
WORD GetKey(HANDLE input)
{
INPUT_RECORD Event;
DWORD Read;
ReadConsoleInput(input,&Event,1,&Read);
if(Event.EventType == KEY_EVENT)
{
if(Event.Event.KeyEvent.bKeyDown)
{
return Event.Event.KeyEvent.wVirtualKeyCode;
}
}
return 0;
}
然后我将它用于主while()循环。但是,当我启动程序时,它滞后(显示时钟暂停约3-5秒延迟)。这个问题更奇怪的是,当我按住“1”键时,滞后问题就消失了......:
WORD LastAction = GetKey(input) //this chunk of code lies in the main while(!quit)
switch(LastAction)
{
case VK_ESCAPE:
quit = true;
break;
case '1':
case VK_NUMPAD1:
break;
default:
break;
}
是因为我对ReadConsoleInput()的理解不够吗?或者我的代码效率不高?
请就此问题告诉我
THX
答案 0 :(得分:2)
如果没有要读取的事件,ReadConsoleInput
将阻止等待事件。您需要使用GetNumberOfConsoleInputEvents
检查可用事件,然后在有任何在线状态时读取事件,或暂停一会儿,例如Sleep(10)
,如果没有。