From 8bdb5db67fa3eeda755511f91fd257bde548a18f Mon Sep 17 00:00:00 2001 From: crupest Date: Wed, 9 Jun 2021 22:28:01 +0800 Subject: import(life): ... --- works/life/operating-system-experiment/Thread.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'works/life/operating-system-experiment/Thread.h') diff --git a/works/life/operating-system-experiment/Thread.h b/works/life/operating-system-experiment/Thread.h index c71c11f..79c1728 100644 --- a/works/life/operating-system-experiment/Thread.h +++ b/works/life/operating-system-experiment/Thread.h @@ -3,9 +3,17 @@ #include "Base.h" +#ifdef CRU_WINDOWS +#include +#else +#include +#endif + #ifdef __cplusplus +#include #include +#include #include #include #include @@ -38,6 +46,8 @@ private: #ifdef CRU_WINDOWS DWORD thread_id_ = 0; HANDLE thread_handle_ = nullptr; +#else + std::unique_ptr thread_; #endif }; @@ -45,6 +55,7 @@ namespace details { #ifdef CRU_WINDOWS CRU_API DWORD WINAPI ThreadProc(_In_ LPVOID lpParameter); #else +void *ThreadProc(void *data); #endif } // namespace details @@ -59,6 +70,12 @@ Thread::Thread(Fn &&process, Args &&...args) { #ifdef CRU_WINDOWS thread_handle_ = ::CreateThread(nullptr, 0, &::cru::details::ThreadProc, static_cast(p), 0, &thread_id_); + assert(thread_handle_); +#else + thread_.reset(new pthread_t()); + auto c = pthread_create(thread_.get(), nullptr, details::ThreadProc, + static_cast(p)); + assert(c == 0); #endif }; } // namespace cru -- cgit v1.2.3