Die exakte Zeitmessung mit MacOS wird mit der Funktion mach_absolute_time()
durchgeführt. Diese Funktion findet sich im Darwinkernel in den Includes in der Datei mach/mach_time.h
. Um eine klare Aussage zu treffen, wieviel Zeit genau vergangen ist, hilft die Funktion AbsoluteToNanoseconds()
in den CoreServices des MacOS.
#include <mach/mach_time.h> #include <CoreServices/CoreServices.h>
Mit folgender Funktion lässt sich die aktuelle Zeit als 64 Bit Integer darstellen:
uint64_t timeAsNanoseconds(void) { uint64_t t = mach_absolute_time(); return *(uint64_t *) &AbsoluteToNanoseconds(* (AbsoluteTime*) &t); }
Nun können wir die Zeit messen, die ein Vorgang benötigt:
uint64_t begin, end; begin = timeAsNanoseconds(); /* Programmabschnitt, dessen Zeit gemessen werden soll */ end = timeAsNanoSeconds();
Die benötigte Zeit lässt sich nun wie folgt in Nanosekunden berechnen:
uint64_t elapsed = end - begin;
Um diesen Quelltext zu kompilieren muss das CoreServices
-Framework an dem Compiler übergeben werden, zum Beispiel:
gcc test.c -framework CoreServices
siehe auch: MacResearch