Tomada de tempo

Tempo do relógio físico

No exemplo abaixo é demonstrado como obter o tempo (do relógio físico) que o aplicativo demorou até ser encerrado.

#include <stdio.h>
#include <sys/time.h>

void para_demorar() {
    printf("Pressione ENTER para prosseguir\n");
    while (1) {
        if (getchar())
            break;
    }
}

int main(int argc, char **argv) {
    struct timeval inicio, fim;

    // Iniciando tomada de tempo
    gettimeofday(&inicio, 0);

    para_demorar();

    // Finalizando tomada de tempo
    gettimeofday(&fim, 0);

    long seg = fim.tv_sec - inicio.tv_sec;
    long mseg = fim.tv_usec - inicio.tv_usec;
    double tempo_total = seg + mseg * 1e-6;

    printf("Tempo gasto: %f segundos.\n", tempo_total);

    return 0;
}

Tempo gasto de CPU

No exemplo anterior foi demonstrado como saber o tempo que uma aplicação demorou para ser executado, considerando um relógio físico. Nessa seção é apresentado um exemplo de como medir o tempo que a CPU ficou ocupada processando as instruções da aplicação. Cabe citar, que o tempo gasto com operações de entrada e saída bloqueantes não será computado como tempo que o CPU ficou ocupado.

#include <stdio.h>
#include <sys/time.h>

void para_demorar() {
    printf("Pressione ENTER para encerrar\n");
    while (1) {
        if (getchar())
            break;
    }
}
int main(int argc, char **argv) {
    //https://www.gnu.org/software/libc/manual/html_node/CPU-Time.html
    clock_t start, end;
    double cpu_time_used;

    // Iniciando tomada de tempo
    start = clock();
    
    para_demorar();
    
    // Finalizando tomada de tempo
    end = clock();

    cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
    printf("Tempo gasto de CPU: %f segundos.\n", cpu_time_used);
    return 0;
}