+ Mutex()
+ {
+ InitializeCriticalSection(&wutex);
+ }
+ void Lock()
+ {
+ EnterCriticalSection(&wutex);
+ }
+ void Unlock()
+ {
+ LeaveCriticalSection(&wutex);
+ }
+ ~Mutex()
+ {
+ DeleteCriticalSection(&wutex);
+ }
+};
+
+class ThreadQueueData
+{
+ CRITICAL_SECTION mutex;
+ HANDLE event;
+ public:
+ ThreadQueueData()
+ {
+ InitializeCriticalSection(&mutex);
+ event = CreateEvent(NULL, false, false, NULL);
+ }
+
+ ~ThreadQueueData()
+ {
+ DeleteCriticalSection(&mutex);
+ }
+
+ void Lock()
+ {
+ EnterCriticalSection(&mutex);
+ }
+
+ void Unlock()
+ {
+ LeaveCriticalSection(&mutex);
+ }
+
+ void Wakeup()
+ {
+ PulseEvent(event);
+ }
+
+ void Wait()
+ {
+ LeaveCriticalSection(&mutex);
+ WaitForSingleObject(event, INFINITE);
+ EnterCriticalSection(&mutex);
+ }