From 421c8db14430011d40f8f8499ca4aefbcc26d07e Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 9 Feb 2012 14:24:19 -0800 Subject: rt: Move rust_thread to its own files --- src/rt/sync/rust_thread.cpp | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/rt/sync/rust_thread.cpp (limited to 'src/rt/sync/rust_thread.cpp') diff --git a/src/rt/sync/rust_thread.cpp b/src/rt/sync/rust_thread.cpp new file mode 100644 index 00000000000..49daaa5c96d --- /dev/null +++ b/src/rt/sync/rust_thread.cpp @@ -0,0 +1,43 @@ +#include "globals.h" +#include "rust_thread.h" + +rust_thread::rust_thread() : thread(0) { +} + +#if defined(__WIN32__) +static DWORD WINAPI +#elif defined(__GNUC__) +static void * +#else +#error "Platform not supported" +#endif +rust_thread_start(void *ptr) { + rust_thread *thread = (rust_thread *) ptr; + thread->run(); + return 0; +} + +void +rust_thread::start() { +#if defined(__WIN32__) + thread = CreateThread(NULL, 0, rust_thread_start, this, 0, NULL); +#else + pthread_attr_t attr; + pthread_attr_init(&attr); + pthread_attr_setstacksize(&attr, 1024 * 1024); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); + pthread_create(&thread, &attr, rust_thread_start, (void *) this); +#endif +} + +void +rust_thread::join() { +#if defined(__WIN32__) + if (thread) + WaitForSingleObject(thread, INFINITE); +#else + if (thread) + pthread_join(thread, NULL); +#endif + thread = 0; +} -- cgit 1.4.1-3-g733a5