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

ordepavr

contar tempo num programa

9 mensagens neste tópico

Olá, eu estou a fazer um programa e gostava de contar o tempo que o utilizador demorou a resolver o jogo. Não fasso ideia de como contar o tempo... queria uma forma de contar o tempo durante o programa e saber se da para contar o tempo de X a X sitios por exemplo:

coloco no inicio a começar a contagem e quero que a contagem pare num determinado sitio.. isso é possivel?

outra forma era contar o programa ate ao fim....

espero que me possam ajudar

cumps, Pedro Lopes

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para contar o tempo até que o programa termine, se for em linux, podes usar a função time, fazes na consola:

time ./prog

para contares o tempo de determinada parte do código, podes utilizar a função gettimeofday que te dá o tempo actual do sistema. contas o tempo antes da parte que queres testar, contas no fim e fazes a diferença.

mais info: http://rabbit.eng.miami.edu/info/functions/time.html

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens algumas variantes.

A primeira é a mais simples, mas a resolução é em segundos.

A segunda, conforme a sugesão do nata79, com gettimeofday pode ir até aos microsegundos, mas cuidado, o relógio pode contar de 10 em 10 milisegundos (e não microsegundos sequer).

A terceira é uma maneira de contar tempo assincronamente, usando sinais. Por exemplo, dá para implementar um tempo limite, ao fim do qual se termina o jogo.

#include <time.h>

int main(){
//
//

   time_t start = time(NULL); 
   //tempo em segundos desde um pré-determinadomomento no passado (the Epoch)

//
//
//
  time_t diff = time(NULL) - start;

  
}

#include <sys/time.h>

int main(){
//
//

   struct timeval t;
   gettimeofday(&t,NULL);
   //tempo em segundos e microsegundos desde um pré-determinadomomento no passado (the Epoch)

//
//
//

}

#include <unistd.h>
#include <alarm.h>

void alarm_handler(int sig) {

if(sig == SIGALRM) {
    //fazer qualquer coisa

   alarm(60); //reiniciar o alarme
  }

}


int main(){

   signal(SIGALRM, alarm_handler); //registar o handler para o sinal SIGALRM

//
//

   alarm(60); //daqui a um minuto a execução do programa será suspensa e executada o handler

//
//
//

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Note-se que as duas últimas sugestões do edsousa só funcionam sem bibliotecas extra em ambientes *NIX.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Segundo percebi, o link que mostraste explica que é necessário estar a correr uma KORN Shell, que implementa um subsistema UNIX no Windows. Se assim for, o que disse mantém-se.

Se percebi mal, por favor corrijam-me.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e contar o tempo que um programa demorou a carregar um ficheiro? como se faz?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
struct timeval t1,t2;
gettimeofday(&t1,NULL);
ler_ficheiro();
gettimeofday(&t2,NULL);

//fazer contas com t2 e t1 (segundos de t2 - segundos de t1; microseg de t2-microseg de t1. se negativo, +1 000 000 microsec e -1 segundo)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E profiling da aplicação não seria melhor ? uma vez que queres estar a medir alguns tens é possível que o profiling te dê alguma ajuda.

Boas programações

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