diff options
Diffstat (limited to 'source/api_wrappers/linux/OS.cpp')
-rw-r--r-- | source/api_wrappers/linux/OS.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/source/api_wrappers/linux/OS.cpp b/source/api_wrappers/linux/OS.cpp index 55c82bd..6ed6425 100644 --- a/source/api_wrappers/linux/OS.cpp +++ b/source/api_wrappers/linux/OS.cpp @@ -5,6 +5,7 @@ #include <time.h> #include <errno.h> +#include <sys/time.h> #include "Types.h" #include "OS.h" @@ -31,29 +32,30 @@ void OS::Sleep(DWORD dwMilliseconds) time_t OS::GetSystemTimeInMs() { - timespec systemTime; - clock_gettime(CLOCK_REALTIME, &systemTime); - return (systemTime.tv_sec * 1000) + (systemTime.tv_nsec / 1000000); + struct timeval current_time; + + gettimeofday(¤t_time, NULL); + + return (current_time.tv_sec * 1000) + (current_time.tv_usec / 1000); } timespec OS::GetAbsoluteTime(DWORD dwTimeout) { timespec absolute_time; - timespec current_time; - + timeval current_time; long timeout_nsec; - clock_gettime(CLOCK_REALTIME, ¤t_time); + gettimeofday(¤t_time, NULL); absolute_time.tv_sec = current_time.tv_sec + (dwTimeout / 1000); timeout_nsec = (dwTimeout % 1000) * 1000000L; - if ((1000000000 - current_time.tv_nsec) < timeout_nsec) { + if ((1000000000 - current_time.tv_usec * 1000) < timeout_nsec) { // overflow will occur! absolute_time.tv_sec++; } - absolute_time.tv_nsec = (current_time.tv_nsec + timeout_nsec) % 1000000000; + absolute_time.tv_nsec = (current_time.tv_usec * 1000 + timeout_nsec) % 1000000000; return absolute_time; } |