[RISOLTO]C++ Misurare il tempo

di il
8 risposte

[RISOLTO]C++ Misurare il tempo

Ciao ragazzi, volevo sapere se esiste qualche codice per misurare il tempo con la libreria <ctime>.. Mi spiego meglio, io devo fare un programma che appena scrivo un numero, il programma aspettera in secondi quel numero e poi stamperà un qualcosa.
Tipo scrivo in input 5 e dopo 5 secondi stamperà "ciao". Ho letto un pò qua e di là per i siti ma non ci ho capito niente! Grazie in anticipo!

8 Risposte

  • Re: [RISOLTO]C++ Misurare il tempo

    Ciao westy,
    Il punto principale è se questa attesa è bloccante oppure no. Nel primo caso in un ciclo ti metti a guadare l' orologio finchè il tempo è scaduto (usando ad esempio 'time' e 'difftime'), nel secondo caso devi ricorrere a un thread o ad un timer.
  • Re: [RISOLTO]C++ Misurare il tempo

    Penso ad un timer, così appena è ad un determinato momento gli si dice di stampare
  • Re: [RISOLTO]C++ Misurare il tempo

    Per i timer a quanto ne so non c' è niente di standard, il codice è diverso se sei sotto Windows o Linux. In che ambiente sei?
  • Re: [RISOLTO]C++ Misurare il tempo

    Mac, quindi Linux
  • Re: [RISOLTO]C++ Misurare il tempo

    Bene, allora devi usare le funzioni init_timer, add_timer, troverai numerosi esempi. Il principio del timer e quello che dopo un certo periodo di tempo viene richiamata la funzione che tu gli hai indicato, all' interno di questa funzione dovrai stampare "ciao".

    Lo schema è:
    
    int main()
    {
      - ...
      - chiedo il numero di secondi;
      - creo un timer e gli dico che la funzione di risposta è 'pippo'
      - ... rimango in qualche loop ... // occhio a non terminare subito
    }
    
    static void pippo(unsigned long arg) // questa verrà richiamata dal timer dopo n secondi.
    {
        cout << "ciao";
    }
    
  • Re: [RISOLTO]C++ Misurare il tempo

    La struttura l'ho capita ma non so come creare il timer. Ho trovato diversi esempi, in molti creano delle classi timer ed altri fanno cose assurde e non capisco come si fa! Ho solo capito che con clock(); faccio partire un timer e che se lo sottraggo con uno che si avvia dopo ottengo il tempo del primo, ma con questo programma non c'entra niente penso .__.
  • Re: [RISOLTO]C++ Misurare il tempo

    In effetti in rete si trovano esempi complicatissimi, diciamo che i timer possono fare cose complicate (possono fare un solo colpo oppure essere ripetitivi, puoi impostare i secondi e pure i microsecondi, puoi generare segnali differenti ecc.), pero a te serve un esempio semplice.

    Questo dovrebbe essere abbastanza comprensibile, l' ho provato sul Mac e funziona:
    
    #include <signal.h>
    #include <sys/time.h>
    
    #include <iostream>
    using namespace std;
    
    void MyHandler(int data)
    {
        cout << "Tanti saluti dal timer" << endl;
    }
    
    int main(int argc, const char * argv[])
    {
        cout << "Intruduci il numero di secondi\n";
        int seconds;
        cin >> seconds;
        cout << "Fra " << seconds << " secondi ti mando un saluto\n";
      
        struct sigaction sa;
        memset (&sa, 0, sizeof(sa)); // azzera sa
        sa.sa_handler = &MyHandler; // imposta la funzione di risposta
        sigaction(SIGALRM, &sa, NULL);    
        
        struct itimerval timer;
        memset (&timer, 0, sizeof(timer)); // azzera timer
        timer.it_value.tv_sec = seconds;  // imposta i secondi
      
        setitimer(ITIMER_REAL, &timer, NULL); // avvia il timer, chiamerà la tua funzione
         
        cout << "Premi 'k' se vuoi terminare" << endl;
        while(getchar() != 'k');
        
        cout << "Fine\n";
        return 0;
    }
    

    Nel post precedente ti avevo parlato di funzioni init_timer, add_timer che forse erano più semplici, appartengono al mondo Linux, pensavo andassero anche su Mac e invece no.

    Un' altra soluzione è quella bloccante in cui fai un loop dove leggi l' orologio, la scelta dipende da cosa deve fare il tuo programma.
  • Re: [RISOLTO]C++ Misurare il tempo

    Grazie barba!!!! Finalmente l'ho e diciamo che l'ho capito! ahahah Su internet non capivo niente e tu me l'hai spiegato in modo semplice! Adesso la uso per altre applicazioni! Ti ringrazio un mondo barba!
Devi accedere o registrarti per scrivere nel forum
8 risposte