OS-X specific sleep helper, more stable.

This commit is contained in:
James Turner 2012-12-23 23:30:40 +00:00
parent 0423aedffc
commit a131f44247

View File

@ -255,6 +255,24 @@ bool SGTimeStamp::sleepFor(const SGTimeStamp& reltime)
// Don't know, but may be win32 has something better today??
Sleep(static_cast<DWORD>(reltime.toMSecs()));
return true;
#elif defined __APPLE__
// the generic version below behaves badly on Mac; use nanosleep directly,
// similar to the POSIX timers version
struct timespec ts;
ts.tv_sec = reltime._sec;
ts.tv_nsec = reltime._nsec;
for (;;) {
struct timespec rem;
int ret = nanosleep(&ts, &rem);
if (-1 == ret && errno != EINTR)
return false;
if (ret == 0)
break;
// Use the remainder for the next cycle.
ts = rem;
}
return true;
#else
SGTimeStamp abstime;
abstime.stamp();