GNU/Linux >> Znalost Linux >  >> Linux

Měření uplynulého času v linuxu pro program c

Tři alternativy

  1. clock()
  2. gettimeofday()
  3. clock_gettime()

clock_gettime() dosahuje až nanosekundové přesnosti a podporuje 4 hodiny.

  • CLOCK_REALTIME

    Celosystémové hodiny reálného času. Nastavení těchto hodin vyžaduje příslušná oprávnění.

  • CLOCK_MONOTONIC

    Hodiny, které nelze nastavit a představují monotónní čas od nějakého nespecifikovaného počátečního bodu.

  • CLOCK_PROCESS_CPUTIME_ID

    Časovač jednotlivých procesů s vysokým rozlišením z CPU.

  • CLOCK_THREAD_CPUTIME_ID

    Hodiny procesorového času specifické pro vlákno.

Můžete jej použít jako

#include <time.h>

struct timespec start, stop;

clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start);

/// do something

clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &stop);

double result = (stop.tv_sec - start.tv_sec) * 1e6 + (stop.tv_nsec - start.tv_nsec) / 1e3;    // in microseconds

Poznámka:Funkce clock() vrací čas CPU pro váš proces, nikoli čas nástěnných hodin. Věřím, že to je to, co OP zajímalo. Pokud je požadován čas nástěnných hodin, pak gettimeofday() je dobrá volba, jak naznačuje dřívější odpověď. clock_gettime() může udělat obojí, pokud to váš systém podporuje; na mém vestavěném systému linux clock_gettime() není podporováno, ale clock() a gettimeofday() ano.

Níže je uveden kód pro získání času nástěnných hodin pomocí gettimeofday()

#include <stdio.h> // for printf()
#include <sys/time.h> // for clock_gettime()
#include <unistd.h> // for usleep()

int main() {
    struct timeval start, end;
    long secs_used,micros_used;

    gettimeofday(&start, NULL);
    usleep(1250000); // Do the stuff you want to time here
    gettimeofday(&end, NULL);

    printf("start: %d secs, %d usecs\n",start.tv_sec,start.tv_usec);
    printf("end: %d secs, %d usecs\n",end.tv_sec,end.tv_usec);

    secs_used=(end.tv_sec - start.tv_sec); //avoid overflow by subtracting first
    micros_used= ((secs_used*1000000) + end.tv_usec) - (start.tv_usec);

    printf("micros_used: %d\n",micros_used);
    return 0;
}

Chcete-li začít, musíte použít aritmetiku s plovoucí desetinnou čárkou. Jakákoli celočíselná hodnota dělená větší celočíselnou hodnotou bude vždy nula.

A samozřejmě byste to měli udělat něco mezi získáním času začátku a konce.

Mimochodem, pokud máte přístup k gettimeofday obvykle je upřednostňován před clock protože má vyšší rozlišení. Nebo možná clock_gettime který má ještě vyšší rozlišení.


Linux
  1. Linux time Command Tutorial pro začátečníky (s příklady)

  2. Linux Sleep Command – zpoždění po určitou dobu

  3. Nejlepší bezplatné hodiny pro Linux

  1. Linux – nástroj pro měření kvality entropie?

  2. Jak předem načíst program pro rychlejší start?

  3. Jak nastavit ID procesu v Linuxu pro konkrétní program

  1. 7 Linux hwclock Příklady příkazů pro nastavení hardwarových hodin Date Time

  2. Formát data a času pro skript nebo proměnnou prostředí Linux

  3. Změřte čas v Linuxu - čas vs hodiny vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?