rgcaldas Posted October 26, 2007 at 08:26 PM Report Share #143134 Posted October 26, 2007 at 08:26 PM 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 Link to comment Share on other sites More sharing options...
Rui Carlos Posted October 26, 2007 at 08:48 PM Report Share #143144 Posted October 26, 2007 at 08:48 PM Em Unix, penso que a função gettimeofday deve servir. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
TheDark Posted October 26, 2007 at 11:34 PM Report Share #143181 Posted October 26, 2007 at 11:34 PM Se for Windows, esta resposta serve. Desaparecido. Link to comment Share on other sites More sharing options...
rgcaldas Posted October 27, 2007 at 12:14 AM Author Report Share #143195 Posted October 27, 2007 at 12:14 AM 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; } Link to comment Share on other sites More sharing options...
André Aparicio Posted October 27, 2007 at 02:19 AM Report Share #143203 Posted October 27, 2007 at 02:19 AM 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; Link to comment Share on other sites More sharing options...
Rui Carlos Posted October 27, 2007 at 10:18 AM Report Share #143217 Posted October 27, 2007 at 10:18 AM Se o objectivo é apenas medir o desempenho de uma função, é melhor usar o comando time existente nos sistemas Unix. Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
TheDark Posted October 27, 2007 at 03:03 PM Report Share #143276 Posted October 27, 2007 at 03:03 PM 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 Desaparecido. Link to comment Share on other sites More sharing options...
rgcaldas Posted October 27, 2007 at 07:28 PM Author Report Share #143341 Posted October 27, 2007 at 07:28 PM 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. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now