Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

rgcaldas

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

Mensagens Recomendadas

rgcaldas    0
rgcaldas

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

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;
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
André Aparicio    0
André Aparicio

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;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
rgcaldas    0
rgcaldas

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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade