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

标签 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()的理解不够?或者我的代码效率不高?

这个问题请多多指教

谢谢

最佳答案

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

关于C++:尝试为控制台创建事件驱动(但遇到问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5125278/

相关文章:

c++ - 我的 C++ 合并排序代码不起作用。我在这里缺少什么?

c++ - 如何在策略之间共享成员?

c++ - Linux 上运行程序的目录?

c# - 创建一个 c# windows 服务来轮询数据库

c# - 谷歌身份验证 C#

c++ - 在 c/c++ 中何时按引用传递以及何时按值传递

c++ - 使用批处理文件和 C++ 的环境变量

c++ -::GetPrivateProfileString 读取 INI 文件的整个部分

google-chrome - Chrome 调试器 : clicking exception link in console opens file in new tab instead of cross-linking into source file