Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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!


"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." (Robert Firth)
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).


"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." (Robert Firth)
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
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.


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
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:


"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." (Robert Firth)
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
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.


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
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.


"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." (Robert Firth)
PM Quote