From 1bb6ba0605d56f5fcb3a190a350659dd2e4ae600 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 23 Jan 2010 14:29:56 +0000 Subject: Thread queue: use _ftime to get current time on windows, same as pthreads-win32 test suite. --- source/blender/blenlib/intern/threads.c | 40 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 21 deletions(-) (limited to 'source/blender/blenlib') diff --git a/source/blender/blenlib/intern/threads.c b/source/blender/blenlib/intern/threads.c index 610984f2d9c..a81d5ed64e4 100644 --- a/source/blender/blenlib/intern/threads.c +++ b/source/blender/blenlib/intern/threads.c @@ -47,6 +47,7 @@ /* for checking system threads - BLI_system_thread_count */ #ifdef WIN32 #include "windows.h" +#include #elif defined(__APPLE__) #include #include @@ -524,32 +525,30 @@ void *BLI_thread_queue_pop(ThreadQueue *queue) static void wait_timeout(struct timespec *timeout, int ms) { -#ifndef WIN32 - struct timeval now; ldiv_t div_result; - long x; + long sec, usec, x; - gettimeofday(&now, NULL); - div_result = ldiv(ms, 1000); - timeout->tv_sec = now.tv_sec + div_result.quot; - x = now.tv_usec + (div_result.rem*1000); - - if (x >= 1000000) { - timeout->tv_sec++; - x -= 1000000; +#ifdef WIN32 + { + struct _timeb now; + _ftime(&now); + sec = now.time; + usec = now.millitm*1000; /* microsecond precision would be better */ } - - timeout->tv_nsec = x*1000; #else - /*XXX test me*/ - time_t now; - ldiv_t div_result; - long x; + { + struct timeval now; + gettimeofday(&now, NULL); + sec = now.tv_sec; + usec = now.tv_usec; + } +#endif - time(&now); + /* add current time + millisecond offset */ div_result = ldiv(ms, 1000); - timeout->tv_sec = now + div_result.quot; - x = (now*1000) + (div_result.rem*1000); + timeout->tv_sec = sec + div_result.quot; + + x = usec + (div_result.rem*1000); if (x >= 1000000) { timeout->tv_sec++; @@ -557,7 +556,6 @@ static void wait_timeout(struct timespec *timeout, int ms) } timeout->tv_nsec = x*1000; -#endif } void *BLI_thread_queue_pop_timeout(ThreadQueue *queue, int ms) -- cgit v1.2.3