From 6be74d17df75714066b36cfa6ae40081526ef477 Mon Sep 17 00:00:00 2001 From: kwolekr Date: Fri, 16 Oct 2015 21:12:30 -0400 Subject: Refactor thread utility interface - Add "thr_" prefix to thread utility functions - Compare threadid_ts in a portable manner, where possible --- src/threads.h | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 7 deletions(-) (limited to 'src/threads.h') 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 +#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 -- cgit v1.2.3