|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2003
Città: Monza
Messaggi: 175
|
Come catturare gli interrupt da tastiera con C?
Ciao a tutti!
Ultimamente sto scrivendo un programmino in C che, tra le tante funzioni, ha la necessità di catturare un Interrupt dato da tastiera (es la pressione di un determinato tasto) in Run Time (ad esempio, per fermare un conto alla rovescia) E' possibile? Che funzioni posso invocare? A che librerie devo fare riferimento? Ciao!
__________________
Ciao! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sotto Windows non puoi accedere direttamente a queste cose (a meno che tu non stia programmando per DOS)... L'unica cosa è usare le API ed intercettare un messaggio WM_KEYDOWN e dopo verificare il tasto premuto...
Per effettuare il countdown puoi inizializzare un timer che ti controlla l'orologio di sistema ogni decimo di secondo (mettere un timer ogni secondo è probabilemnte meno preciso (non c'è garanzia di esecuzione entro quell'intervallo preciso, quindi dopo 100 conteggi potrebbero anche essere passati 101 secondi Ultima modifica di cionci : 18-04-2004 alle 11:20. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2003
Città: Monza
Messaggi: 175
|
e sotto LInux?
__________________
Ciao! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Se lo dicevi prima
Con le ncurses: http://vlsm.org/linux-archive/i6/msg00210.html Guarda il ciclo (quel while(1))... Esce quando c (il carattere letto) è un carattere valido (ovviamente la parte importante che ti permette di fare così è quella sopra, altrimenti la getch sarebbe bloccante)... In pratica tu farai un ciclo del genere: Codice:
time_t told, tnew;
time(&told);
while(conteggio < MAX)
{
sleep(10); /*oppure fai lavorare la tua appplicazione*/
time(&tnew);
conteggio += (int)difftime(tnew, told);
told = tnew;
if((c = getch()) != ERR) break; /*se è un tasto valido esco dal ciclo*/
}
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Altro link utile:
http://www.linuxquestions.org/questi...threadid=34027 Questa è una cosa diversa...disattiva il line buffering dello stdin... |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Sotto linux potresti anche usare le syscall kill e signal
man 2 kill man signal |
|
|
|
|
|
#7 | |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16214
|
Re: Come catturare gli interrupt da tastiera con C?
Quote:
Questo semplicemente perché gli interrupt e la loro cattura dipendono dall'architettura hardware della macchina su cui gira il programma. Consulta il manuale del compilatore. Se stai lavorando sotto Windows o sotto Linux, segui anche i consigli degli altri utenti. P.S.: Una cosa che si può fare in C standard, invece, è rilevare la pressione del tasto Invio. Non è proprio così, in realtà, ma l'effetto del codice: Codice:
while (getchar() != '\n')
;
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Re: Re: Come catturare gli interrupt da tastiera con C?
Quote:
|
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: May 2003
Città: Monza
Messaggi: 175
|
Qualche cosa di buono l'ho comunque trovata sfruttando le librerie non standard curses incluse in Linux... svolgono egregiamente (per quello che mi servono ora) il loro dovere
Grazie ragazzi!
__________________
Ciao! |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:08.



















