aboutsummaryrefslogtreecommitdiff
path: root/src/threading/thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/threading/thread.cpp')
-rw-r--r--src/threading/thread.cpp114
1 files changed, 4 insertions, 110 deletions
diff --git a/src/threading/thread.cpp b/src/threading/thread.cpp
index 1909da61d..e566824f7 100644
--- a/src/threading/thread.cpp
+++ b/src/threading/thread.cpp
@@ -28,31 +28,6 @@ DEALINGS IN THE SOFTWARE.
#include "log.h"
#include "porting.h"
-#define UNUSED(expr) do { (void)(expr); } while (0)
-
-#if USE_CPP11_THREADS
- #include <chrono>
- #include <system_error>
-#elif USE_WIN_THREADS
- #ifndef _WIN32_WCE
- #include <process.h>
- #endif
-#elif USE_POSIX_THREADS
- #include <time.h>
- #include <assert.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/time.h>
-
- #if defined(__FreeBSD__) || defined(__APPLE__)
- #include <sys/types.h>
- #include <sys/sysctl.h>
- #elif defined(_GNU_SOURCE)
- #include <sys/sysinfo.h>
- #endif
-#endif
-
-
// for setName
#if defined(__linux__)
#include <sys/prctl.h>
@@ -70,8 +45,6 @@ DEALINGS IN THE SOFTWARE.
// for bindToProcessor
#if __FreeBSD_version >= 702106
typedef cpuset_t cpu_set_t;
-#elif defined(__linux__)
- #include <sched.h>
#elif defined(__sun) || defined(sun)
#include <sys/types.h>
#include <sys/processor.h>
@@ -121,28 +94,12 @@ bool Thread::start()
// The mutex may already be locked if the thread is being restarted
m_start_finished_mutex.try_lock();
-#if USE_CPP11_THREADS
-
try {
m_thread_obj = new std::thread(threadProc, this);
} catch (const std::system_error &e) {
return false;
}
-#elif USE_WIN_THREADS
-
- m_thread_handle = CreateThread(NULL, 0, threadProc, this, 0, &m_thread_id);
- if (!m_thread_handle)
- return false;
-
-#elif USE_POSIX_THREADS
-
- int status = pthread_create(&m_thread_handle, NULL, threadProc, this);
- if (status)
- return false;
-
-#endif
-
// Allow spawned thread to continue
m_start_finished_mutex.unlock();
@@ -169,31 +126,12 @@ bool Thread::wait()
if (!m_joinable)
return false;
-#if USE_CPP11_THREADS
m_thread_obj->join();
delete m_thread_obj;
m_thread_obj = NULL;
-#elif USE_WIN_THREADS
-
- int ret = WaitForSingleObject(m_thread_handle, INFINITE);
- assert(ret == WAIT_OBJECT_0);
- UNUSED(ret);
-
- CloseHandle(m_thread_handle);
- m_thread_handle = NULL;
- m_thread_id = -1;
-
-#elif USE_POSIX_THREADS
-
- int ret = pthread_join(m_thread_handle, NULL);
- assert(ret == 0);
- UNUSED(ret);
-
-#endif
-
assert(m_running == false);
m_joinable = false;
return true;
@@ -209,9 +147,10 @@ bool Thread::kill()
m_running = false;
-#if USE_WIN_THREADS
- TerminateThread(m_thread_handle, 0);
- CloseHandle(m_thread_handle);
+#if defined(_WIN32)
+ // See https://msdn.microsoft.com/en-us/library/hh920601.aspx#thread__native_handle_method
+ TerminateThread((HANDLE) m_thread_obj->native_handle(), 0);
+ CloseHandle((HANDLE) m_thread_obj->native_handle());
#else
// We need to pthread_kill instead on Android since NDKv5's pthread
// implementation is incomplete.
@@ -241,13 +180,7 @@ bool Thread::getReturnValue(void **ret)
}
-#if USE_CPP11_THREADS || USE_POSIX_THREADS
void *Thread::threadProc(void *param)
-#elif defined(_WIN32_WCE)
-DWORD Thread::threadProc(LPVOID param)
-#elif defined(_WIN32)
-DWORD WINAPI Thread::threadProc(LPVOID param)
-#endif
{
Thread *thr = (Thread *)param;
@@ -325,46 +258,7 @@ void Thread::setName(const std::string &name)
unsigned int Thread::getNumberOfProcessors()
{
-#if USE_CPP11_THREADS
-
return std::thread::hardware_concurrency();
-
-#elif USE_WIN_THREADS
-
- SYSTEM_INFO sysinfo;
- GetSystemInfo(&sysinfo);
- return sysinfo.dwNumberOfProcessors;
-
-#elif defined(_SC_NPROCESSORS_ONLN)
-
- return sysconf(_SC_NPROCESSORS_ONLN);
-
-#elif defined(__FreeBSD__) || defined(__NetBSD__) || \
- defined(__DragonFly__) || defined(__APPLE__)
-
- unsigned int num_cpus = 1;
- size_t len = sizeof(num_cpus);
-
- int mib[2];
- mib[0] = CTL_HW;
- mib[1] = HW_NCPU;
-
- sysctl(mib, 2, &num_cpus, &len, NULL, 0);
- return num_cpus;
-
-#elif defined(_GNU_SOURCE)
-
- return get_nprocs();
-
-#elif defined(PTW32_VERSION) || defined(__hpux)
-
- return pthread_num_processors_np();
-
-#else
-
- return 1;
-
-#endif
}