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++ - bloccare un ciclo infinito
Forum - C/C++ - bloccare un ciclo infinito

Avatar
nuccio (Normal User)
Newbie


Messaggi: 3
Iscritto: 09/02/2007

Segnala al moderatore
Postato alle 11:52
Venerdì, 09/02/2007
innzanzi tutto ciao a tutti.

il mio problema inserire un controllo (da tastiera, magari con una combinazioone di tasti) dentro un ciclo infinito in modo da fermare lo stesso, in modo da poter effettuare altre operazioni.

Pensavo di avere trovato la soluzione nella funzione int kbhit(void) della lib conio.h... ma credo che in c++ (ambiente KDevelop) non si possa fare...

come posso fare?
ciao e grazie.

PS... complimenti per il forum.

PM Quote
Avatar
nikipe_silver (Founder Member)
Expert


Messaggi: 339
Iscritto: 20/09/2005

Segnala al moderatore
Postato alle 17:10
Venerdì, 09/02/2007
per uscire da un qualsiasi ciclo puoi usare il break o il goto,oppure rihiamare dall'interno una funzione apposta...


c'e' qualcosa in questa pizza che non mi quadra...
E' logico, e' tonda..E' facile se ci pensi..
PM Quote
Avatar
andry89mm (Member)
Pro


Messaggi: 128
Iscritto: 21/12/2006

Segnala al moderatore
Postato alle 17:18
Venerdì, 09/02/2007
Un " break; " secondo me  è la soluzione migliore

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6111
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 17:54
Venerdì, 09/02/2007
Se ho ben supposto qual'e' il tuo problema, ti consiglio di dare un'occhiata all'argomento multithreading e in particolare alla funzione fork().


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

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
nuccio (Normal User)
Newbie


Messaggi: 3
Iscritto: 09/02/2007

Segnala al moderatore
Postato alle 18:03
Venerdì, 09/02/2007
il mio problema è "la condizione" per cui il break possa avvenire... il ciclo infinito è frutto di una funzione di libreria (la pcap_loop di libpcap) su cui non posso intervenire più di tanto... questa cicla all'infinito catturando i pacchetti che arrivano alla scheda di rete (sto realizando uno sniffer). Tutto ciò a me andrebbe benissimo fino a quando però devo interrompere la cattura, ed effettuare la mia statistica.

ora io vorrei inserire un break, all'interno di una funzione usata e da me definita da questa funzione che cicla, però mi serve la condizione, vi chiedo se conoscete una funzione che faccia al  caso mio che, per esempio come la kbhit della conio.h, controlla se è stato premuto un tasto e nel caso torna un 1... in tal modo io porrei almeno una pausa alla cattura dei miei pacchetti per fare tutto il resto...

spero d'esser stato più preciso e grazie a chi mi ha risposto.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6111
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 1:29
Sabato, 10/02/2007
E infatti la mia risposta ti ha dato la soluzione. Devi semplicemente effettuare il controllo su kbhit da un altro thread (oppure usare la funzione di pcap su un altro thread) in modo che il programma non si "congeli".

Ultima modifica effettuata da pierotofy il 10/02/2007 alle 1:30


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

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
nuccio (Normal User)
Newbie


Messaggi: 3
Iscritto: 09/02/2007

Segnala al moderatore
Postato alle 19:59
Domenica, 11/02/2007
ho risolto per altra via...
anche se la tua sono sicuro sia la più elegante, nonchè corretta.

Tramite la (signal)(SIGINT, term) di signal.h riesco ad interrompere il famigereto ciclo con la pressione di ctrl-C e passo alla tern, funzione ove vado a lavorare sui pacchetti catturati fino a quel punto.

che ne dici? ciao.

PM Quote
Avatar
AMRITA (Normal User)
Newbie


Messaggi: 2
Iscritto: 29/12/2007

Segnala al moderatore
Postato alle 21:58
Sabato, 29/12/2007

Ciao, io ho avuto lo stesso problema, e ho usato SIGNAL.
Ho messo un if all'interno del ciclo for, ma non mi funziona:
if (SIG_IGN != signal (SIGINT, Terminator));
Mi puoi dire come hai fatto?
Grazie

PM Quote