1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[ C ] calcular tempo decorrido

Discussão em 'Programação' iniciada por Nausea, 13 de Dezembro de 2008. (Respostas: 9; Visualizações: 4976)

  1. Nausea

    Nausea Power Member

    Boas queria calcular o tempo decorrido de um determinado momento até outro por exemplo o tempo de um for() mas em milisegundos ou coisa assim parecida eu tentei com a função times() mas dá-me sempre 0 segundos devido ao ciclo for() ser executado rapidamente.
     
  2. Aparicio

    Aparicio /dev/mod
    Staff Member

    Se for em windows podes fazer assim:
    Código:
    #include <stdio.h>
    #include <windows.h>
    
    int main()
        {
        LARGE_INTEGER inicio, fim, freq;
        
        // Inicia o temporizador
        QueryPerformanceCounter( &inicio );
        
        // O código...
        int x;
        for(x = 0; x <= 1000; x++)
            printf("%d\n", x);
        
        // Termina o temporizador
        QueryPerformanceCounter( &fim ); 
        
        // Calcula o tempo decorrido
        float tempo_total = (float)( fim.QuadPart - inicio.QuadPart ) / freq.QuadPart;
        
        printf( "%f\n", tempo_total );
        
        return 0;
        }
    
     
  3. Nausea

    Nausea Power Member

    Por acaso é em linux...
     
  4. Granadafeup

    Granadafeup Power Member

    inclui a biblioteca time.h e já tens acesso a algumas funções para fazer o que pretendes.
     
  5. Aparicio

    Aparicio /dev/mod
    Staff Member

    Com o time.h têm-se apenas precisão de 1 segundo que não serve para o que ele quer.
    Para ser na ordem dos milisegundos têm que ser específico do SO, mas não sei como é em linux.
     
  6. Nausea

    Nausea Power Member

    descobri que se calhar é possivel com o gettimeofday()
     
  7. Nausea

    Nausea Power Member

    Código:
    #include <iostream>
    #include <sys/time.h>                // for gettimeofday()
    using namespace std;
    
    int main()
    {
        timeval t1, t2;
        double elapsedTime;
    
        // start timer
        gettimeofday(&t1, NULL);
    
        // do something
        ...
    
        // stop timer
        gettimeofday(&t2, NULL);
    
        // compute and print the elapsed time in millisec
        elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0;      // sec to ms
        elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000.0;   // us to ms
    
    [COLOR=Red][B]-->[/B][/COLOR] elapsedTime = (t2.tv_usec - t1.tv_usec) / (1000*1000);
        //isto supostamente se eu imprimir dava algo do genero? "0.001 Segundos"
        cout << elapsedTime << " ms.\n";
    
        return 0;
    }
     
  8. Granadafeup

    Granadafeup Power Member

    Segundo este site a biblioteca tem precisão até aos ticks do processador.
     
    Última edição: 15 de Dezembro de 2008
  9. Aparicio

    Aparicio /dev/mod
    Staff Member

    Não me lembrei do clock(), o time() é que têm um precisão de apenas um segundo.
     

Partilhar esta Página