#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),
_next_activation(new time_stamp),
_how(TIGHT_INTERVAL) // unused.
{
-// FUNCDEF("constructor [one-shot]");
+ FUNCDEF("constructor [one-shot]");
}
ethread::ethread(int sleep_timer, timed_thread_types how)
: _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),
_next_activation(new time_stamp),
_how(how)
{
-// FUNCDEF("constructor [periodic]");
+ FUNCDEF("constructor [periodic]");
if (sleep_timer < MINIMUM_SLEEP_PERIOD) {
_sleep_time = MINIMUM_SLEEP_PERIOD;
}
{
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.
#endif
{
-// FUNCDEF("one_shot_thread_driver");
+ 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.
#endif
{
-// FUNCDEF("periodic_thread_driver");
+ 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
}