Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    stoppare un ciclo for

    Sto facendo un ciclo for infinito, di un programma scritto in C, che mi deve leggere dei dati da un server. Il mio problema e che devo riuscire a stoppare il processo senza killarlo, perchè devo salvare i dati in un file.
    Ho provato con una scanf, ma non funziona.
    Ora sto provando con la libreria signal, ma ho qualche problema....

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Il linguaggio va sempre specificato nel titolo.

    Ad ogni modo, se stai usando un ciclo for per un loop infinito stai sbagliando costrutto: usa un while!


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Ho specificato il linguaggio è C.
    Cmq perchè starei sbagliando tutto con il for? E poi anche se usassi il while come faccio a stopparlo senza killare il processo?

  4. #4
    codice:
    break;

  5. #5
    break non va bene, perchè devo stoppare il ciclo for da tastiera.
    Già l'avevo provato.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il break lo devi mettere all'interno di una if che controlla la pressione di un tasto.

    Se e' stato pressato un tasto (o il tasto che preferisci) allora esegui il break, a prescindere se usi il for o il while ...

    Per ottenere il tasto esistono le opportune funzioni. Intanto lavori in Windows o Linux (presuppongo Linux ...)?

  7. #7
    Originariamente inviato da AMRITA1979
    break non va bene, perchè devo stoppare il ciclo for da tastiera.
    Già l'avevo provato.
    Se tu lo avessi scritto nel primo post...
    In ogni modo il tuo problema è: comunicare qualcosa ad un processo. Ci sono diverse soluzioni: signal, pipe fifo, file, socket, database, input vari ecc..

    Scrivi anche che hai dei problemi con signal. Che problemi?

  8. #8
    faccio la seguente cose:
    ....
    #include<signal.h>
    ....

    unsigned char terminator =0;

    void terminationon_handler
    {
    terminator= 1;
    }
    main()
    {
    ...
    for(;
    {
    .....
    }
    if(signal(SIGINT, termination_handler))
    signal(SIGINT, SIG_IGN);
    pause();
    }




    questa non funziona, quando stoppo il processo lo uccide e non salva i dati nel file.txt

  9. #9
    Devi installare l'handler del segnale prima di volerlo catturare.

    codice:
    // Compiled an tested with: i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5367)
    #include <stdio.h>
    #include <signal.h>
    
    static unsigned int sPleaseExit = 0;
    
    static void Terminator (int theSignal){
    	if (SIGINT == theSignal){
    		sPleaseExit = 1;
    	}
    }
    
    int main (int argc, const char * argv[]) {
    	if (SIG_ERR != signal (SIGINT, Terminator)){
    		int i;
    		for (i = 0; 0 == sPleaseExit; ++i){
    			// to exit from this loop, send me SIGINT signal (press CTRL-C)
    			printf ("i = %d;\n", i);
    		}
    		
    		// now do whatever you want: write to file etc.
    	}
    	else{
    		printf ("signal error;\n");
    	}
    	printf ("bye bye...\n");
    	return 0;
    }

  10. #10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.