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.