diff options
-rw-r--r-- | OpenAL32/Include/alMain.h | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index 4d963563..d6fc5c15 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -184,16 +184,26 @@ static __inline void DeleteCriticalSection(CRITICAL_SECTION *cs) * as opposed to the actual time. */ static __inline ALuint timeGetTime(void) { - int ret; #if _POSIX_TIMERS > 0 + static int hasmono = 0; struct timespec ts; + int ret = -1; - ret = clock_gettime(CLOCK_REALTIME, &ts); +#if defined(_POSIX_MONOTONIC_CLOCK) && (_POSIX_MONOTONIC_CLOCK >= 0) +#if _POSIX_MONOTONIC_CLOCK == 0 + if(hasmono > 0 || (hasmono == 0 && + (hasmono=sysconf(_SC_MONOTONIC_CLOCK)) > 0)) +#endif + ret = clock_gettime(CLOCK_MONOTONIC, &ts); +#endif + if(ret != 0) + ret = clock_gettime(CLOCK_REALTIME, &ts); assert(ret == 0); return ts.tv_nsec/1000000 + ts.tv_sec*1000; #else struct timeval tv; + int ret; ret = gettimeofday(&tv, NULL); assert(ret == 0); |