7 #define WIN32_LEAN_AND_MEAN
17 // Moved this here from Thread.ec to make compiling ecereCOM in Debug easier
18 public int GetCurrentThreadID()
20 #if defined(__WIN32__)
21 return (int)GetCurrentThreadId();
23 return pthread_self();
27 public class Mutex : struct
30 #if defined(__WIN32__)
34 CRITICAL_SECTION mutex;
37 pthread_mutex_t mutex;
47 #if defined(__WIN32__)
49 mutex = CreateMutex(null, FALSE, null);
51 InitializeCriticalSection(&mutex);
54 pthread_mutexattr_t attr;
55 pthread_mutexattr_init(&attr);
58 pthread_mutexattr_setkind_np(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
60 pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
63 pthread_mutex_init(&mutex, &attr);
64 pthread_mutexattr_destroy(&attr);
75 #if defined(__WIN32__)
79 DeleteCriticalSection(&mutex);
82 pthread_mutex_destroy(&mutex);
92 if(this == globalSystem.fileMonitorMutex)
93 printf("[%d] Waiting on Mutex %x\n", GetCurrentThreadID(), this);
95 #if defined(__WIN32__)
97 if(WaitForSingleObject(mutex, INFINITE /*2000*/) == WAIT_TIMEOUT)
100 EnterCriticalSection(&mutex);
103 pthread_mutex_lock(&mutex);
107 owningThread = GetCurrentThreadID();
118 if(this == globalSystem.fileMonitorMutex)
119 printf("[%d] Releasing Mutex %x\n", GetCurrentThreadID(), this);
128 #if defined(__WIN32__)
132 LeaveCriticalSection(&mutex);
135 pthread_mutex_unlock(&mutex);