Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Terminare ciclo premendo un tasto
Forum - C/C++ - Terminare ciclo premendo un tasto

Avatar
Zani88 (Member)
Pro


Messaggi: 136
Iscritto: 07/05/2006

Segnala al moderatore
Postato alle 13:00
Lunedì, 20/10/2008
C'è qualcuno che ha idea di come si faccia a fare un ciclo che termina quando l'utente preme un determinato tasto? Mi servirebbe una soluzione più portabile possibile per Windows e Linux. Grazie!

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 14:26
Lunedì, 20/10/2008
Devi usare delle funzioni che non sono standard del linguaggio.

in un'applicazione windows console, puoi usare kbhit(), definita in conio.h

in linux, al momento non saprei, magari c'è qualcosa nelle librerie ncurses

Ciao :)

PM Quote
Avatar
Zani88 (Member)
Pro


Messaggi: 136
Iscritto: 07/05/2006

Segnala al moderatore
Postato alle 14:35
Lunedì, 20/10/2008
Grazie!
Sicuramente non è tra le funzioni standard ma un metodo che funzioni su entrambi non c'è? Il mio problema è che devo eseguire un certo tot di istruzioni finché l'utente non preme un certo tasto. Se esiste un implementazione diversa bene lo stesso (che so ad esempio usando i segnali).

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 10:41
Martedì, 21/10/2008
Devi usare i threads o le fork per fare quel che chiedi... di conseguenza un codice uguale sia per Windows che per Linux credo sia impossibile. Puoi però garantire la compatibilità di compilazione mettendo qualche istruzione condizionale di preprocessore.


Il mio blog: https://piero.dev
PM Quote
Avatar
Zani88 (Member)
Pro


Messaggi: 136
Iscritto: 07/05/2006

Segnala al moderatore
Postato alle 23:10
Martedì, 21/10/2008
Ok l'importante che almeno il procedimento fosse quello. Però più nello specifico come bisognerebbe fare? Non mi interessa il codice ma a livello concettuale ovviamente... :k:

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 10:24
Mercoledì, 22/10/2008
Fai partire il thread secondario che esegue il codice tipo così:

Codice sorgente - presumibilmente Plain Text

  1. while(threadRunning){
  2.    //Codice qui
  3. }



In quell'altro invece aspetti per l'input dell'utente:

Codice sorgente - presumibilmente Plain Text

  1. while(!kbhit()) Sleep(1);
  2. threadRunning = false;



Qualcosa del genere.


Il mio blog: https://piero.dev
PM Quote
Avatar
Zani88 (Member)
Pro


Messaggi: 136
Iscritto: 07/05/2006

Segnala al moderatore
Postato alle 14:49
Giovedì, 23/10/2008
Grazie!
Se a qualcuno interessa su http://vimtron.blogspot.com/2008/01/kbhit-for-linux.html si trova come implementare la kbhit su Linux.

PM Quote