#include <structures/static_memory_gremlin.h>
#include <timely/time_control.h>
-#ifdef __WIN32__
+#ifdef _MSC_VER
#include <process.h>
-#elif defined(__UNIX__)
+#elif defined(__UNIX__) || defined(__GNU_WINDOWS__)
#include <pthread.h>
#else
#error unknown OS for thread support.
: _thread_ready(false),
_thread_active(false),
_stop_thread(false),
- _data(NIL),
-#ifdef __UNIX__
- _handle(new pthread_t),
-#elif defined(__WIN32__)
+ _data(NULL_POINTER),
+#ifdef _MSC_VER
_handle(0),
+#else
+ _handle(new pthread_t),
#endif
_sleep_time(0),
_periodic(false),
: _thread_ready(false),
_thread_active(false),
_stop_thread(false),
- _data(NIL),
-#ifdef __UNIX__
- _handle(new pthread_t),
-#elif defined(__WIN32__)
+ _data(NULL_POINTER),
+#ifdef _MSC_VER
_handle(0),
+#else
+ _handle(new pthread_t),
#endif
_sleep_time(sleep_timer),
_periodic(true),
{
stop();
WHACK(_next_activation);
-#ifdef __UNIX__
+#ifndef _MSC_VER
WHACK(_handle);
#endif
}
int error = 0;
int attempts = 0;
while (attempts++ < MAXIMUM_CREATE_ATTEMPTS) {
-#ifdef __UNIX__
+#ifndef _MSC_VER
pthread_attr_t attribs; // special flags for creation of thread.
int aret = pthread_attr_init(&attribs);
if (aret) LOG("failed to init attribs.");
(void *)this);
if (!ret) success = true;
else error = ret;
-#elif defined(__WIN32__)
+#else
if (_periodic)
_handle = _beginthread(periodic_thread_driver, 0, (void *)this);
else
cancel(); // tell thread to leave.
if (!thread_started()) return; // not running.
while (!thread_finished()) {
-#ifdef __WIN32__
+#ifdef _MSC_VER
int result = 0;
if (!GetExitCodeThread((HANDLE)_handle, (LPDWORD)&result)
|| (result != STILL_ACTIVE)) {
{
_thread_active = false;
_thread_ready = false;
-#ifdef __WIN32__
+#ifdef _MSC_VER
_handle = 0;
#endif
}
-#ifdef __UNIX__
+#if defined(__UNIX__) || defined(__GNU_WINDOWS__)
void *ethread::one_shot_thread_driver(void *hidden_pointer)
-#elif defined(__WIN32__)
+#elif defined(_MSC_VER)
void ethread::one_shot_thread_driver(void *hidden_pointer)
#else
#error unknown thread signature.
{
FUNCDEF("one_shot_thread_driver");
ethread *manager = (ethread *)hidden_pointer;
-#ifdef __UNIX__
- if (!manager) return NIL;
+#ifndef _MSC_VER
+ if (!manager) return NULL_POINTER;
#else
if (!manager) return;
#endif
#ifdef COUNT_THREADS
_current_threads().decrement();
#endif
-#ifdef __UNIX__
- pthread_exit(NIL);
- return NIL;
+#ifndef _MSC_VER
+ pthread_exit(NULL_POINTER);
+ return NULL_POINTER;
#else
_endthread();
#endif
}
-#ifdef __UNIX__
+#if defined(__UNIX__) || defined(__GNU_WINDOWS__)
void *ethread::periodic_thread_driver(void *hidden_pointer)
-#elif defined(__WIN32__)
+#elif defined(_MSC_VER)
void ethread::periodic_thread_driver(void *hidden_pointer)
#else
#error unknown thread signature.
{
FUNCDEF("periodic_thread_driver");
ethread *manager = (ethread *)hidden_pointer;
-#ifdef __UNIX__
- if (!manager) return NIL;
-#elif defined(__WIN32__)
+#if defined(__UNIX__) || defined(__GNU_WINDOWS__)
+ if (!manager) return NULL_POINTER;
+#elif defined(_MSC_VER)
if (!manager) return;
#endif
#ifdef COUNT_THREADS
#ifdef COUNT_THREADS
_current_threads().decrement();
#endif
-#ifdef __UNIX__
- pthread_exit(NIL);
- return NIL;
-#elif defined(__WIN32__)
+#ifndef _MSC_VER
+ pthread_exit(NULL_POINTER);
+ return NULL_POINTER;
+#else
_endthread();
#endif
}