it-swarm.com.de

Wie messe ich die Zeit in C?

Ich möchte herausfinden, wie lange (ungefähr) ein Codeblock ausgeführt wird. Etwas wie das:

startStopwatch();
// do some calculations
stopStopwatch();
printf("%lf", timeMesuredInSeconds);

Wie?

35
snakile

Sie können die clock-Methode in time.h verwenden. 

Beispiel:

clock_t start = clock();
/*Do something*/
clock_t end = clock();
float seconds = (float)(end - start) / CLOCKS_PER_SEC;
57
KLee1

Sie können die Bibliothek time.h verwenden, insbesondere die Funktionen time und difftime :

/* difftime example */
#include <stdio.h>
#include <time.h>

int main ()
{
  time_t start,end;
  double dif;

  time (&start);
  // Do some calculation.
  time (&end);
  dif = difftime (end,start);
  printf ("Your calculations took %.2lf seconds to run.\n", dif );

  return 0;
}

(Beispiel angepasst von der oben verlinkten different-Webseite.)

Bitte beachten Sie, dass diese Methode nur Sekunden für Genauigkeit liefern kann - time_t zeichnet die Sekunden seit der UNIX-Epoche (1. Januar 1970) auf.

17
Stephen

GetTickCount ().

#include <windows.h>
void MeasureIt()
{
    DWORD dwStartTime = GetTickCount();
    DWORD dwElapsed;

    DoSomethingThatYouWantToTime();

    dwElapsed = GetTickCount() - dwStartTime;

    printf("It took %d.%3d seconds to complete\n", dwElapsed/1000, dwElapsed - dwElapsed/1000);
}
2
selbie

Ich würde die Funktionen QueryPerformanceCounter und QueryPerformanceFrequency der Windows-API verwenden. Rufen Sie den vorherigen vor und nach dem Block auf und ziehen Sie ihn ab (aktuell - alt), um die Anzahl der "Ticks" zwischen den Instanzen zu erhalten. Teilen Sie dies durch den Wert, der von der letzteren Funktion erhalten wird, um die Dauer in Sekunden zu ermitteln.

1

Irgendwann ist es erforderlich, astronomische Zeit anstatt CPU-Zeit zu messen (insbesondere gilt dies für Linux )

#include <time.h>

double what_time_is_it()
{
    struct timespec now;
    clock_gettime(CLOCK_REALTIME, &now);
    return now.tv_sec + now.tv_nsec*1e-9;
}

int main() {
    double time = what_time_is_it();
    printf("time taken %.6lf\n", what_time_is_it() - time);
    return 0;
}
0
Ivan Talalaev

Wenn Sie keine fantastische Auflösung benötigen, können Sie GetTickCount () verwenden: http://msdn.Microsoft.com/en-us/library/ms724408(VS.85).aspx (Falls vorhanden) Für etwas anderes als für Ihre eigene einfache Diagnose beachten Sie bitte, dass sich diese Zahl umschreiben kann. Daher müssen Sie dies mit ein wenig Rechenaufwand bewerkstelligen.

QueryPerformanceCounter ist eine weitere sinnvolle Option. (Es ist auch auf MSDN beschrieben)

0
user357501