diff options
author | Jeff Witthuhn <witthuhn> | 2018-03-28 12:31:51 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-03-28 13:13:04 +0300 |
commit | bc3a55c3439c29a85af334c289ac2dcb35f08e07 (patch) | |
tree | 51aa9bc67cd0f82134cac1d1b2d816b8baf38655 /intern/cycles/util/util_thread.cpp | |
parent | e49d66f22cf7ac14e7254150387eb8e07114f20c (diff) |
Cycles: don't require pthreads as dependency on Windows.
Use C++11 threads when available, and native critical section on Windows.
Later on we can remove pthread code when C+11 becomes required.
Differential Revision: https://developer.blender.org/D3116
Diffstat (limited to 'intern/cycles/util/util_thread.cpp')
-rw-r--r-- | intern/cycles/util/util_thread.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/intern/cycles/util/util_thread.cpp b/intern/cycles/util/util_thread.cpp index 3dcb09804b0..c66aa484264 100644 --- a/intern/cycles/util/util_thread.cpp +++ b/intern/cycles/util/util_thread.cpp @@ -26,7 +26,11 @@ thread::thread(function<void(void)> run_cb, int group) joined_(false), group_(group) { +#if (__cplusplus > 199711L) || (defined(_MSC_VER) && _MSC_VER >= 1800) + thread_ = std::thread(&thread::run, this); +#else pthread_create(&pthread_id_, NULL, run, (void*)this); +#endif } thread::~thread() @@ -60,7 +64,17 @@ void *thread::run(void *arg) bool thread::join() { joined_ = true; +#if (__cplusplus > 199711L) || (defined(_MSC_VER) && _MSC_VER >= 1800) + try { + thread_.join(); + return true; + } + catch (const std::system_error&) { + return false; + } +#else return pthread_join(pthread_id_, NULL) == 0; +#endif } CCL_NAMESPACE_END |