Check in code to handle missing clock_gettime() on most versions of Mac OS X

This commit is contained in:
Rich Alloway
2018-04-23 11:11:18 -04:00
parent 5f38c112aa
commit 01f20286ed
2 changed files with 16 additions and 0 deletions

View File

@@ -41,6 +41,12 @@
#include <zmq.hpp>
#include <unistd.h>
// OS X does not have clock_gettime, use clock_get_time (https://gist.github.com/jbenet/1087739)
#ifdef __MACH__
#include <mach/clock.h>
#include <mach/mach.h>
#endif
using namespace std;

View File

@@ -179,7 +179,17 @@ void ZmqLogger::AppendDebugMethod(string method_name, string arg1_name, float ar
// Prepend current time (hires) to message
struct timespec ts;
#ifdef __MACH__ // OS X does not have clock_gettime, use clock_get_time (https://gist.github.com/jbenet/1087739)
clock_serv_t cclock;
mach_timespec_t mts;
host_get_clock_service(mach_host_self(), CALENDAR_CLOCK, &cclock);
clock_get_time(cclock, &mts);
mach_port_deallocate(mach_task_self(), cclock);
ts->tv_sec = mts.tv_sec;
ts->tv_nsec = mts.tv_nsec;
#else
clock_gettime(CLOCK_REALTIME, &ts);
#endif
char timebuf[80];
strftime(timebuf, sizeof timebuf, "%F %T", localtime(&ts.tv_sec));
message << timebuf << "." << std::setiosflags(std::ios::right) << std::setw(9) << std::setfill('0') << ts.tv_nsec << " ";