C: Implementação diferente do clock () no Windows e em outro sistema operacional?
Eu tive que escrever um programa de console muito simples para a universidade que precisava medir o tempo necessário para fazer uma entrada.
Para isso eu useiclock()
na frente e depois de umfgets()
ligar. Ao executar no meu computador Windows, funcionou perfeitamente. No entanto, ao rodar nos meus amigos Mac-Book e Linux-PC, ele deu resultados extremamente pequenos (apenas alguns microssegundos).
Eu tentei o seguinte código em todos os 3 sistemas operacionais:
#include <stdio.h>
#include <time.h>
#include <unistd.h>
void main()
{
clock_t t;
printf("Sleeping for a bit\n");
t = clock();
// Alternatively some fgets(...)
usleep(999999);
t = clock() - t;
printf("Processor time spent: %lf", ((double)t) / CLOCKS_PER_SEC);
}
No Windows, a saída mostra 1 segundo (ou a quantidade de tempo que você levou para digitar ao usarfgets
), nos outros dois sistemas operacionais não muito mais que 0 segundos.
Agora, minha pergunta é por que existe tanta diferença na implementação declock()
nesses sistemas operacionais. Para o Windows, parece que o relógio continua correndo enquanto o thread está em espera / espera, mas para Linux e Mac não?
Edit: Obrigado pelas respostas até agora pessoal, por isso é apenas a implementação defeituosa da Microsoft realmente.
Alguém poderia por favor responder a minha última pergunta:
Também existe uma maneira de medir o que eu queria medir nos três sistemas usando bibliotecas C-standard, poisclock()
só parece funcionar assim no Windows?