Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Lord of Terror

Função Em C Ou C++

Recommended Posts

aí pessoal, preciso de uma Função de C ou C++ que retorne um valor mais preciso que o time() (ele so esta retornando o tempo em segundos), algo em torno de milisegundos já esta bom :D

e, se o próprio time() resolver isso, melhor ainda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depende do seu OS...

No Linux acho que tem o utime(), no Windows tem GetPerformanceCounter() , tem que ver por aí, ok...

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include   <stdio.h>

#include   <dos.h>

int main(void)

{

   struct  time t;

   gettime(&t);

   printf("%2d:%02d:%02d.%02d\n",t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);

   return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

aí, valeu..!

Na verdade vou utilizar essa função aí no DOS, preciso calcular quanto tempo leva o processamento de um algoritmo, valeu

aí Diogo, vou testar isso agora mesmo! valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo, deu um monte de erros :o

vou colar eles aí:

C:\Windows\Desktop\Testes\teste.cpp(7) : error C2079: 't' uses undefined struct 'time'

C:\Windows\Desktop\Testes\teste.cpp(8) : error C2065: 'gettime' : undeclared identifier

C:\Windows\Desktop\Testes\teste.cpp(9) : error C2228: left of '.ti_hour' must have class/struct/union type

C:\Windows\Desktop\Testes\teste.cpp(9) : error C2228: left of '.ti_min' must have class/struct/union type

C:\Windows\Desktop\Testes\teste.cpp(9) : error C2228: left of '.ti_sec' must have class/struct/union type

C:\Windows\Desktop\Testes\teste.cpp(9) : error C2228: left of '.ti_hund' must have class/struct/union type

Error executing cl.exe.

teste.obj - 6 error(s), 0 warning(s)

eu apenas colei o codigo font e compilei, nem vi direito o q ta escrito, vou tenta da umas mexidas pra ver no q da ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado Originalmente por Lord of Terror@14 mar 2004, 20:16

tipo, deu um monte de erros  :o

vou colar eles aí:

C:\Windows\Desktop\Testes\teste.cpp(7) : error C2079: 't' uses undefined struct 'time'

C:\Windows\Desktop\Testes\teste.cpp(8) : error C2065: 'gettime' : undeclared identifier

C:\Windows\Desktop\Testes\teste.cpp(9) : error C2228: left of '.ti_hour' must have class/struct/union type

C:\Windows\Desktop\Testes\teste.cpp(9) : error C2228: left of '.ti_min' must have class/struct/union type

C:\Windows\Desktop\Testes\teste.cpp(9) : error C2228: left of '.ti_sec' must have class/struct/union type

C:\Windows\Desktop\Testes\teste.cpp(9) : error C2228: left of '.ti_hund' must have class/struct/union type

Error executing cl.exe.

teste.obj - 6 error(s), 0 warning(s)

eu apenas colei o codigo font e compilei, nem vi direito o q ta escrito, vou tenta da umas mexidas pra ver no q da  ;)

qual o compilador que você tá usando?...e o SO?

Compartilhar este post


Link para o post
Compartilhar em outros sites

to usando Visual C++ Win98/SE

vou explicar melhor como vai ser aplicado a função:

Preciso calcular quanto tempo leva um processamento de alguma coisa, então fiz assim:

antes=time(0);

@@@o que seria processado viria aqui.@@@

depois=time(0);

tempo=depois-antes;

isso funciona bem, o único problema é que como o processamento é muito rápido, não chega a levar 1 segundo, então: 0 segundos - 0 segundos = 0 segundos.

Preciso de algo mais preciso que Segundos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use as funções QueryPerformanceFrequency e QueryPerformanceCounter.

Com a primeira você irá obter a frequência do timer (algo como 1.1MHz, o que dá menos de 1 microsegundo) e com a segunda você irá obter o número de "ticks".

Ficaria algo assim:

{

__int64 freq,start,stop;

double tempo;

QueryPerformanceFrequency((LARGE_INTEGER *)&freq);

QueryPerformanceCounter((LARGE_INTEGER *)&start);

Código a ser medido

QueryPerformanceCounter((LARGE_INTEGER *)&stop);

tempo = ((double)stop-(double)start) / (double)freq;

}

Deveria funcionar direto no você++

Edit: Ah, você disse que vai usar no DOS. O que você chama de "DOS"? Se for uma janela do prompt de comando do Windows pode usar a função que falei, mas se for bootando com um disquete do velho DOS, não vai funcionar. Neste caso procure usar a função clock().

Compartilhar este post


Link para o post
Compartilhar em outros sites

O sledgehammer valeu aí pela dica.. bom.. eu testei la mas ta falando que não ta identificando "QueryPerformanceFrequency" , "QueryPerformanceCounter"

tem alguma biblioteca q preciso usar?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado Originalmente por Lord of Terror@15 mar 2004, 14:29

O sledgehammer valeu aí pela dica.. bom.. eu testei la mas ta falando que não ta identificando "QueryPerformanceFrequency" , "QueryPerformanceCounter"

tem alguma biblioteca q preciso usar?

Se você tem disponível a ajuda do Visual C, entrar no índice lá e procurar por QueryPerformanceCounter, vai ver que ele indica o .h que deve ser incluído. (não lembro de cor)

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado Originalmente por Lord of Terror@15 mar 2004, 18:04

po! funcionou sledge!!  :D

so que o valor q ele me retorna é em q? milisegundos mesmo? clocks por segundo?

Acho que é em milisegundos mesmo.

Pra testar faça a medição de um comando Sleep(1000). Se retornar 1000 é porque é em ms. Se retornar 1 é porque é em segundos.

Ele retorna em ticks. Quando você divide pela frequência em ticks por ms ou segundo (não sei), ele te retorna o tempo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×