C ++:尝试为控制台创建事件驱动(但遇到问题)

时间:2011-02-26 05:33:48

标签: c++ windows console

我正在尝试用一个控制台制作一个事件驱动程序,该控制台显示自程序启动以来的时钟时间。

我创建了一个函数:

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

1 个答案:

答案 0 :(得分:2)

如果没有要读取的事件,ReadConsoleInput将阻止等待事件。您需要使用GetNumberOfConsoleInputEvents检查可用事件,然后在有任何在线状态时读取事件,或暂停一会儿,例如Sleep(10),如果没有。