summaryrefslogtreecommitdiff
path: root/src/threads.h
diff options
context:
space:
mode:
authorkwolekr <kwolekr@minetest.net>2015-10-16 21:12:30 -0400
committerkwolekr <kwolekr@minetest.net>2015-10-16 22:20:24 -0400
commit6be74d17df75714066b36cfa6ae40081526ef477 (patch)
tree13bf9b742aff873d3e618a610973812c4545945c /src/threads.h
parent836486a98e7b09e25b97c9d989301ed9eb365b3b (diff)
downloadminetest-6be74d17df75714066b36cfa6ae40081526ef477.tar.gz
minetest-6be74d17df75714066b36cfa6ae40081526ef477.tar.bz2
minetest-6be74d17df75714066b36cfa6ae40081526ef477.zip
Refactor thread utility interface
- Add "thr_" prefix to thread utility functions - Compare threadid_ts in a portable manner, where possible
Diffstat (limited to 'src/threads.h')
-rw-r--r--src/threads.h67
1 files changed, 60 insertions, 7 deletions
diff --git a/src/threads.h b/src/threads.h
index bc3bf571d..176b69c2e 100644
--- a/src/threads.h
+++ b/src/threads.h
@@ -20,22 +20,75 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#ifndef THREADS_HEADER
#define THREADS_HEADER
+//
+// Determine which threading API we will use
+//
+#if __cplusplus >= 201103L
+ #define USE_CPP11_THREADS 1
+#elif defined(_WIN32)
+ #define USE_WIN_THREADS 1
+#else
+ #define USE_POSIX_THREADS 1
+#endif
+
+///////////////
+
+
+#if USE_CPP11_THREADS
+ #include <thread>
+#endif
+
#include "threading/mutex.h"
-#if defined(WIN32) || defined(_WIN32_WCE)
-typedef DWORD threadid_t;
-#else
-typedef pthread_t threadid_t;
+//
+// threadid_t, threadhandle_t
+//
+#if USE_CPP11_THREADS
+ typedef std::thread::id threadid_t;
+ typedef std::thread::native_handle_type threadhandle_t;
+#elif USE_WIN_THREADS
+ typedef DWORD threadid_t;
+ typedef HANDLE threadhandle_t;
+#elif USE_POSIX_THREADS
+ typedef pthread_t threadid_t;
+ typedef pthread_t threadhandle_t;
+#endif
+
+//
+// ThreadStartFunc
+//
+#if USE_CPP11_THREADS || USE_POSIX_THREADS
+ typedef void *(ThreadStartFunc)(void *param);
+#elif defined(_WIN32_WCE)
+ typedef DWORD (ThreadStartFunc)(LPVOID param);
+#elif defined(_WIN32)
+ typedef DWORD WINAPI (ThreadStartFunc)(LPVOID param);
#endif
-inline threadid_t get_current_thread_id()
+
+inline threadid_t thr_get_current_thread_id()
{
-#if defined(WIN32) || defined(_WIN32_WCE)
+#if USE_CPP11_THREADS
+ return std::this_thread::get_id();
+#elif USE_WIN_THREADS
return GetCurrentThreadId();
-#else
+#elif USE_POSIX_THREADS
return pthread_self();
#endif
}
+inline bool thr_compare_thread_id(threadid_t thr1, threadid_t thr2)
+{
+#if USE_POSIX_THREADS
+ return pthread_equal(thr1, thr2);
+#else
+ return thr1 == thr2;
#endif
+}
+inline bool thr_is_current_thread(threadid_t thr)
+{
+ return thr_compare_thread_id(thr_get_current_thread_id(), thr);
+}
+
+#endif