rubidium@10175: /* $Id$ */ rubidium@10175: rubidium@10175: /** @file thread_os2.cpp OS2 implementation of Threads. */ rubidium@10175: rubidium@10175: #include "stdafx.h" rubidium@10175: #include "thread.h" rubidium@10175: rubidium@10175: #if 0 rubidium@10175: #include "debug.h" rubidium@10175: #include "core/alloc_func.hpp" rubidium@10175: #include rubidium@10175: rubidium@10175: #define INCL_DOS rubidium@10175: #include rubidium@10175: #include rubidium@10175: rubidium@10175: struct OTTDThread { rubidium@10175: TID thread; rubidium@10175: OTTDThreadFunc func; rubidium@10175: void *arg; rubidium@10175: void *ret; rubidium@10175: }; rubidium@10175: rubidium@10175: static void Proxy(void *arg) rubidium@10175: { rubidium@10175: OTTDThread *t = (OTTDThread *)arg; rubidium@10175: t->ret = t->func(t->arg); rubidium@10175: } rubidium@10175: rubidium@10175: OTTDThread *OTTDCreateThread(OTTDThreadFunc function, void *arg) rubidium@10175: { rubidium@10175: OTTDThread *t = MallocT(1); rubidium@10175: rubidium@10175: t->func = function; rubidium@10175: t->arg = arg; rubidium@10175: t->thread = _beginthread(Proxy, NULL, 32768, t); rubidium@10175: if (t->thread != (TID)-1) { rubidium@10175: return t; rubidium@10175: } else { rubidium@10175: free(t); rubidium@10175: return NULL; rubidium@10175: } rubidium@10175: } rubidium@10175: rubidium@10175: void *OTTDJoinThread(OTTDThread *t) rubidium@10175: { rubidium@10175: if (t == NULL) return NULL; rubidium@10175: rubidium@10175: DosWaitThread(&t->thread, DCWW_WAIT); rubidium@10175: void *ret = t->ret; rubidium@10175: free(t); rubidium@10175: return ret; rubidium@10175: } rubidium@10175: rubidium@10175: void OTTDExitThread() rubidium@10175: { rubidium@10175: _endthread(); rubidium@10175: } rubidium@10175: rubidium@10175: #endif rubidium@10175: rubidium@10175: /* static */ ThreadObject *ThreadObject::New(OTTDThreadFunc proc, void *param) rubidium@10175: { rubidium@10175: return NULL; rubidium@10175: } rubidium@10175: rubidium@10175: /* static */ ThreadObject *ThreadObject::AttachCurrent() rubidium@10175: { rubidium@10175: return NULL; rubidium@10175: } rubidium@10175: rubidium@10175: /* static */ uint ThreadObject::CurrentId() rubidium@10175: { rubidium@10175: return -1; rubidium@10175: } rubidium@10175: rubidium@10175: /* static */ ThreadSemaphore *ThreadSemaphore::New() rubidium@10175: { rubidium@10175: return NULL; rubidium@10175: }