我正在尝试从控制台制作一个事件驱动程序,该程序显示自程序启动以来的时钟时间。
我创建了一个函数:
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()的理解不够?或者我的代码效率不高?
这个问题请多多指教
谢谢
最佳答案
当没有要读取的事件时,ReadConsoleInput
将阻塞等待事件。您需要使用 GetNumberOfConsoleInputEvents
检查可用事件,然后读取事件(如果存在)或暂停一会儿,例如Sleep(10)
,如果没有。
关于C++:尝试为控制台创建事件驱动(但遇到问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5125278/