C ++: пытается создать управляемый событиями для консоли (но застрял с проблемой) - PullRequest
1 голос
/ 26 февраля 2011

Я пытаюсь создать управляемую событиями программу из консоли, которая отображает время с момента запуска программы.

Я создал функцию:

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 () недостаточно? или мой код не эффективен?

пожалуйста, сообщите мне по этому вопросу

ТНХ

1 Ответ

2 голосов
/ 02 марта 2011

Если нет событий для чтения, ReadConsoleInput заблокирует ожидание события. Вам нужно проверить наличие доступных событий, используя GetNumberOfConsoleInputEvents, затем либо прочитать события, если они есть, либо сделать небольшую паузу, например, Sleep(10), если его нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...