Schnellere Funktion als kbhit() ?



  • Hallo,

    ich habe anscheinend ein Problem mit der Funktion kbhit(). Und zwar geht es darum, daß ich in sehr kurzen, regelmäßigen Abständen gucken muss, ob eine Taste gedrückt wurde. Das mache ich mit folgender Funktion:

    int fintWelcheTasteIstGedrueckt()
        {
        int vintTaste=0;
        if (kbhit())
            {
            vintTaste=getch();
            }
        return vintTaste;
        }
    

    Problem an der Sache ist, daß diese Funktion auch dann eine Menge Zeit zum Ausführen braucht, wenn keine Taste gedrückt wurde. Auf meinem PII650, Win2K sind das 30-40 ms, mit meinem PII350, Win98 sind es schon 50-60ms. Das bricht mir sozusagen das Genick :(. Gibt es da nichts besseres und vor allem schnelleres?

    mfG
    turboPasqual



  • kbhit aus conio.h?

    Verschoben nach "Konsole".



  • GetAsyncKeyState



  • Hallo nochmal,

    so richtig klappt es bei mir jetzt immer noch nicht.
    Habe mal meine Funktion wie folgt abgeändert:

    int fintWelcheTasteIstGedrueckt(string vstringLogdatei,int vintLoglevel)
       {
       int vintTaste=0;
       bool vboolTasteGedrueckt=false;
       for (int i=0;i<256;i++)
          {
          if (GetAsyncKeyState(i)!=0)
             {
             vboolTasteGedrueckt=true;
             }
          }
       if (vboolTasteGedrueckt)
          {
          vintTaste=getch();
          }
       return vintTaste;
       }
    

    Das Problem scheint zu sein, daß GetAsyncKeyState mir zwar zurückliefert, ob gerade zum Zeitpunkt der Abfrage eine Taste gedrückt wird, aber nicht, ob eine Tastatureingabe im Tastaturpuffer liegt. Effekt ist, daß die Zeichen aus dem Tastaturpuffer oft erst später, wenn man weitere Tasten drückt, abgeholt werden. Wie könnte ich das denn anders prüfen?

    mfG
    turboPasqual



  • kbhit() ist schon die schnellste Funktion dafür. Falls du noch etwas mehr Zeit embehren kannst, kansnt du ja am Beginn die Zeit abrufen, und am Ende noch gegebenenfalls ein paar ms warten, damit es immer und überall gleich schnell abläuft.

    MfG SideWinder


Anmelden zum Antworten