// file : odb/details/thread.hxx // copyright : Copyright (c) 2009-2019 Code Synthesis Tools CC // license : GNU GPL v2; see accompanying LICENSE file #ifndef ODB_DETAILS_THREAD_HXX #define ODB_DETAILS_THREAD_HXX #include #include #include #ifdef ODB_THREADS_NONE # error no thread support available #elif defined(ODB_THREADS_CXX11) # include # include # include // move() namespace odb { namespace details { class LIBODB_EXPORT thread { public: thread (void* (*thread_func) (void*), void* arg = 0) { std::promise p; f_ = p.get_future (); t_ = std::thread (thunk, thread_func, arg, std::move (p)); } void* join () { f_.wait (); t_.join (); return f_.get (); } thread (const thread&) = delete; thread& operator= (const thread&) = delete; private: static void thunk (void* (*) (void*), void*, std::promise); private: std::thread t_; std::future f_; }; } } #elif defined(ODB_THREADS_POSIX) #include #elif defined(ODB_THREADS_WIN32) #include #else # error unknown threading model #endif #include #endif // ODB_DETAILS_THREAD_HXX