我正在尝试做一个事件驱动的程序,从一个控制台,显示时钟时间自程序开始。
我创建了一个函数:
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
发布于 2011-03-02 08:17:10
当没有要读取的事件时,ReadConsoleInput将阻止等待事件。您需要使用GetNumberOfConsoleInputEvents检查可用的事件,然后读取事件(如果存在),或者暂停一段时间,例如Sleep(10),如果没有事件。
https://stackoverflow.com/questions/5125278
复制相似问题