Oppure

Loading
09/02/07 10:52
nuccio
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.
aaa
09/02/07 16:10
nikipe_silver
per uscire da un qualsiasi ciclo puoi usare il break o il goto,oppure rihiamare dall'interno una funzione apposta...
aaa
09/02/07 16:18
andry89mm
Un " break; " secondo me è la soluzione migliore
aaa
09/02/07 16:54
pierotofy
Se ho ben supposto qual'e' il tuo problema, ti consiglio di dare un'occhiata all'argomento multithreading e in particolare alla funzione fork().
Il mio blog: piero.dev
09/02/07 17:03
nuccio
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.
aaa
10/02/07 0:29
pierotofy
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 10/02/07 0:30
Il mio blog: piero.dev
11/02/07 18:59
nuccio
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.
aaa
29/12/07 20:58
AMRITA

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
aaa