Tastaturevent abfragen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Tastaturevent abfragen

    Hallo zusammen,
    ich hab folgendes Problem, ich hab ein Thread, der mir in einer while(1) schleife konsolen ausgaben macht, natürlich damit es nicht die ganze Zeit flackert, soll die Ausgabe nur bei bestimmten events kommen, darum benutze ich

    Quellcode

    1. changeEvent = WaitForMultipleObjects(2, events, FALSE, INFINITE);

    Events ist ein HANDLE-Array, das aus 2 Handles besteht, eins davon ist ein event der von dem anderem Thread geschickt wird, fall es neue Meldungen gab, die dargestellt werden müssen, und das ander soll ein Tastatur-event sein, ob eine Eingabe in der Konsole von dem Benutzer stattgefunden ist und wenn ja, welche. Und da hapert's bei mir [Blockierte Grafik: http://www.forum-hilfe.de/images/smilies/frown.png] Da ich unter Windows programmiere, weiß ich nicht, woher ich ein Handle bekomme, das mir dieses Event signalisiert. Es wurde mir GetStdHandle(STD_INPUT_HANDLE); empfohlen, aber da komm ich auch iwie nicht weiter. Habt ihr vielleich ein Idee wie ich mein Problem lösen kann?

    Grüße July
  • also es wird bei WaitForMultipleObjects nicht blockiert. Vielleicht benutze ich's falsch, kA. ich mach in Main-Methode eine Zuweisung dem Handle

    Quellcode

    1. stdinHandle = GetStdHandle(STD_INPUT_HANDLE);

    und später im Thread erwarte ich, dass es wie bei den anderen Events ist, das es durchlässt nur wenn wenn eine Eingabe in der Konsole getätigt wurde.
  • was ich noch vergessen hab zu erwähnen, stdinHandle wird danach dem Array events zugewiesen.

    Quellcode

    1. HANDLE mutex, anzevent;
    2. static HANDLE stdinHandle;
    3. HANDLE events[2];
    4. int main()
    5. {
    6. ...
    7. anzevent = CreateEvent(NULL,TRUE,FALSE,TEXT("Neue Meldung eingetrofen"));
    8. stdinHandle = GetStdHandle(STD_INPUT_HANDLE); //handle für die Eingabe
    9. events[0] = anzevent;
    10. events[1] = stdinHandle;
    11. ......
    12. }
    13. DWORD WINAPI update(LPVOID attr)
    14. {....
    15. DWORD changeEvent;
    16. while(1)
    17. {
    18. ...
    19. if (meldungscounter > 0)
    20. {
    21. ausgabe();
    22. changeEvent = WaitForMultipleObjects(2, events, FALSE, INFINITE);
    23. switch (changeEvent)
    24. {
    25. case WAIT_OBJECT_0 + 0: //es ist eine neue Meldung eingetroffen
    26. {
    27. break;
    28. }
    29. case WAIT_OBJECT_0 + 1: //es gab eine Konsoleneingabe
    30. {
    31. cin >> eingabe;
    32. Sleep(1000);
    33. if (eingabe > 0 && eingabe <= 7)
    34. {
    35. choice = eingabe;
    36. }
    37. break;
    38. }
    39. }
    40. }
    41. else
    42. .....
    43. }
    44. }
    Alles anzeigen


    so sieht ungefähr der Aufbau aus.

    Grüße July