tags:

views:

229

answers:

2

I'm running a giant simulation / with a graphics engine.

There are lots of events that are flying by.

I would like to timestamp them (measured in milliseconds since the start of program execution).

What should I be using for this? [What library?]

+2  A: 

Since Mac OS X is Unix based, try gettimeofday(). It will return seconds and microseconds, up to the resolution of the system clock.

#include <sys/types.h>    
int gettimeofday(struct timeval *tv, struct timezone *tz);

struct timeval {
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};
Yada
+1  A: 

gettimeofday() will mostly work okay, but it is subject to anomalies, e.g. when the user changes the system date/time. A better method would be this:

#include <CoreServices/CoreServices.h>

unsigned long long GetTimeSinceBootInMilliseconds()
{
   UnsignedWide uw = AbsoluteToNanoseconds(UpTime());
   return ((((unsigned long long)uw.hi)<<32)|(uw.lo))/1000000;
}

Note that the values returned by this function will be milliseconds-since-boot, so if you want milliseconds-since-program-start, call this method once at program start, store that value, and subtract it from the later results.

Jeremy Friesner