首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:尝试为控制台创建事件驱动(但遇到问题)

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

Stack Overflow用户
提问于 2011-02-26 13:33:48
回答 1查看 765关注 0票数 1

我正在尝试做一个事件驱动的程序,从一个控制台,显示时钟时间自程序开始。

我创建了一个函数:

代码语言:javascript
复制
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‘键的时候,滞后问题就消失了。:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2011-03-02 08:17:10

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5125278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档