X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fthreads.h;h=d4306f631a966132f926ed56f7602b25a66ea8dc;hb=c26eb87aec7438d167fa2f460a3f412db09c0ac5;hp=18789cf0caca5b73d93549a97c50a974547d148a;hpb=4e1f50035e860a00636ca5d804c267119df99601;p=oweals%2Fminetest.git diff --git a/src/threads.h b/src/threads.h index 18789cf0c..d4306f631 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 -#include - -#if (defined(WIN32) || defined(_WIN32_WCE)) -typedef DWORD threadid_t; +// +// Determine which threading API we will use +// +#if __cplusplus >= 201103L + #define USE_CPP11_THREADS 1 +#elif defined(_WIN32) + #define USE_WIN_THREADS 1 #else -typedef pthread_t threadid_t; + #define USE_POSIX_THREADS 1 +#endif + +/////////////// + + +#if USE_CPP11_THREADS + #include +#endif + +#include "threading/mutex.h" + +// +// 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