Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [C++] Evento tastiera

  1. #1

    [C++] Evento tastiera

    Ciao a tutti, vorrei capire come fare per catturare l'evento pressione di un tasto della tastiera.

    Attualmente faccio in questo modo

    while(true)
    {
    if(GetAsyncKeyState(VK_SPACE)) cout<<"Spacebar down..."<<endl;
    else cout<<"Spacebar up..."<<endl;
    Sleep(500);
    }

    ma mi pare un pò arcaico anche perchè io voglio catturare un evento asincrono e attualmente il programma rimane sempre all'interno del ciclo while.
    Insomma c'è un modo più semplice è immediato per catturare in modo asincrono gli eventi relativi alla pressione dei tasti della tastiera?

    grazie

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    su win o su linux? compilatore? tipo di progetto?

  3. #3
    Originariamente inviato da Stoicenko
    su win o su linux? compilatore? tipo di progetto?
    su windows, compilatore visual studio 2008 progetto win32 applicazione console

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: [C++] Evento tastiera

    Originariamente inviato da ingnuccio
    Insomma c'è un modo più semplice è immediato per catturare in modo asincrono gli eventi relativi alla pressione dei tasti della tastiera?

    grazie
    Che intendi con "asincrono"? Quali tasti devi "catturare" ? Intendi per il tuo programma ? O per altri programmi ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5

    Re: Re: [C++] Evento tastiera

    Originariamente inviato da oregon
    Che intendi con "asincrono"? Quali tasti devi "catturare" ? Intendi per il tuo programma ? O per altri programmi ?
    No intendo per il mio programma. Io vorrei che premendo il tasto spazio della tastiera il programma si blocchi.

    Ora in parte ho risolto utilizzando i thread, in pratica utilizzo un thread che mi gestisce il programma e un altro thread che esegue il seguente codice

    while(true){
    if(GetAsyncKeyState(VK_SPACE))
    {
    blocca_programma();
    break;
    }
    }

    In questo modo però con questo orribile ciclo while il programma va a rilento!! Inoltre il programma si blocca ovunque premo il tasto spazio (ad esempio sto scrivendo qui ed il programma si blocca perchè sto premendo il tasto spazio)

    Quindi mi chiedevo e chiedo dunque a voi se c'è un metodo per eliminare il ciclo while e se la pressione del tasto spazio può essere abilitata solo quando il programma è in evidenza (mi spiego meglio se il programma è ad icona e sto scrivendo sul forum il tasto spazio non dovrebbe funzionare per bloccare il programma) non so se sono stato chiaro

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49
    non so bene come si possa fare in c++ ma è come se in java dovessi creare un listener su quella determinata situazione perchè è chiaro che una situazione di polling con ciclo while è altamente inefficiente

  7. #7

  8. #8
    Originariamente inviato da MacApp
    un punto di partenza potrebbe essere:
    SetConsoleCtrlHandler:
    http://msdn.microsoft.com/en-us/libr...16(VS.85).aspx
    http://www.codeproject.com/KB/winsdk..._handling.aspx
    Già viste queste cose e funziona solo in caso di pressione dei tasti Ctrl+C

  9. #9
    Originariamente inviato da xela86
    non so bene come si possa fare in c++ ma è come se in java dovessi creare un listener su quella determinata situazione perchè è chiaro che una situazione di polling con ciclo while è altamente inefficiente
    E lo so in java il problema si sarebbe risolto in un batter d'occhio!! Anche se utilizzavo un progetto con grafica e senza console il tutto si sarebbe risolto con semplicità!!
    Ma in questo caso mi sa che il C++ non mette a disposizione nulla per risolvere il problema, quindi sto cercando di realizzare qualcosa io aggirando il problema ed evitando il ciclo while

  10. #10
    In C++ con un progetto GUI sarebbe uguale a Java. Semplicemente la console non prevede di default questo tipo di interazione con l'utente.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.