windows - C ++: forsøger at oprette hændelsesdrevet for konsol (men fast med et problem)

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at lave et begivenhedsdrevet program ud af en konsol, der viser klokkeslæt siden starten af ​​programmet.


Jeg skabte en funktion:


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;
}


Derefter brugte jeg det i det vigtigste () løkke. Men da jeg lancerede programmet lades det (den viste klokke pause i 3-5 sekunder forsinkelse). Hvad der er mere mærkeligt på dette problem er, at når jeg trykker og holder nede på '1' -tasten, er lagproblemet lige væk ..:


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;
            }


Er det fordi min forståelse af ReadConsoleInput () ikke er tilstrækkelig? eller min kode er ikke effektiv?


vær venlig at rådgive mig om dette problem


thx

Bedste reference


Når der ikke er nogen begivenheder, der skal læses, blokeres ReadConsoleInput for at vente på en begivenhed. Du skal tjekke for tilgængelige begivenheder ved hjælp af GetNumberOfConsoleInputEvents, og læs derefter begivenheder, hvis der er nogen til stede, eller pause et stykke tid, f.eks. Sleep(10), hvis der ikke er nogen.