X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmisc.cpp;h=4d91c0fbb11ef8e4e2ba20a434b086400761e4e3;hp=610cc2402778768a54d4125268c0cd9aa5883ac4;hb=377c406c748643d1aeec6a7ce9a45b32a7416bf3;hpb=0095f423f2fdb2be7c4a5e1bcf39f18599af5e1e diff --git a/src/misc.cpp b/src/misc.cpp index 610cc240..4d91c0fb 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -17,7 +17,14 @@ along with this program. If not, see . */ -#if !defined(_MSC_VER) +#if defined(_MSC_VER) + +#define _CRT_SECURE_NO_DEPRECATE +#define NOMINMAX // disable macros min() and max() +#include +#include + +#else # include # include @@ -26,13 +33,6 @@ # include # endif -#else - -#define _CRT_SECURE_NO_DEPRECATE -#define NOMINMAX // disable macros min() and max() -#include -#include - #endif #if !defined(NO_PREFETCH) @@ -175,6 +175,33 @@ int cpu_count() { } +/// timed_wait() waits for msec milliseconds. It is mainly an helper to wrap +/// conversion from milliseconds to struct timespec, as used by pthreads. + +void timed_wait(WaitCondition* sleepCond, Lock* sleepLock, int msec) { + +#if defined(_MSC_VER) + int tm = msec; +#else + struct timeval t; + struct timespec abstime, *tm = &abstime; + + gettimeofday(&t, NULL); + + abstime.tv_sec = t.tv_sec + (msec / 1000); + abstime.tv_nsec = (t.tv_usec + (msec % 1000) * 1000) * 1000; + + if (abstime.tv_nsec > 1000000000LL) + { + abstime.tv_sec += 1; + abstime.tv_nsec -= 1000000000LL; + } +#endif + + cond_timedwait(sleepCond, sleepLock, tm); +} + + /// prefetch() preloads the given address in L1/L2 cache. This is a non /// blocking function and do not stalls the CPU waiting for data to be /// loaded from memory, that can be quite slow.