• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rgcaldas

[C][Dúvida] Como calcular tempo em milisegundos RESOLVIDO

8 mensagens neste tópico

Boas

Mais uma dúvida, eu preciso de calcular o tempo que uma função demora a correr em milisegundos.

Já tentei agarrar o tempo de inicio e de fim

  (void) time(&inicio);
  (void) time(&fim);

E mostrar a diferença

difftime(fim,inicio);

Mas isto só me conta o tempo em segundos e não em milisegundos.

Alguém já fez algo do género, ou tem alguma ideia, já tou farto de googlar e não me safo.

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em Unix, penso que a função gettimeofday deve servir.

É mesmo em linux, e safei-me com essa, apesar que dizerem por ai que não é muito fiável.

Se houver mais alguèm interessado fica aqui a solução:

#include <stdio.h>
#include <sys/timeb.h>

#define MICRO_PER_SECOND 1000000 
// Os 1000000 e so porque quero que os milisegundos aparecam como decimal dos segundos
// o membro tv_use da struct timeval vem em microsegundos


int main(int argc,char* argv[])
{
    struct timeval start_time;
    struct timeval stop_time;
    float time_diff;

    gettimeofday( &start_time, NULL );
    funcao(); // qualquer coisa que queiram medir
    gettimeofday( &stop_time, NULL );

     time_diff = (float)(stop_time.tv_sec - start_time.tv_sec);
     time_diff += (stop_time.tv_usec - start_time.tv_usec)/(float)MICRO_PER_SECOND; 
     printf("\nfuncao executada em %f ms",time_diff);

    return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se for Windows, esta resposta serve.

Quando compilo esse código no Dev-C++ dá-me o erro invalid operands to binary / na linha tempoTotal = (float)(tempoFinal.QuadPart - tempoInicial.QuadPart)/freq;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se o objectivo é apenas medir o desempenho de uma função, é melhor usar o comando time existente nos sistemas Unix.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se for Windows, esta resposta serve.

Quando compilo esse código no Dev-C++ dá-me o erro invalid operands to binary / na linha tempoTotal = (float)(tempoFinal.QuadPart - tempoInicial.QuadPart)/freq;

Já alterei no post original. É só trocar freq por freq.QuadPart

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se o objectivo é apenas medir o desempenho de uma função, é melhor usar o comando time existente nos sistemas Unix.

No meu caso não servia porque tinha de contar vários tempos intermédios para calcular médias e devio padrão, Eu simplifiquei o código e coloquei ali uma função.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora