00001 00013 #include "sysconfig.h" 00014 #include "eventqueue.h" 00015 #include "guard.h" 00016 00025 #pragma argsused 00026 EventQueue::EventQueue(int num_threads) { 00027 // mFree = CreateSemaphore(0, num_threads, num_threads, 0); 00028 // mUsed = CreateSemaphore(0, 0, num_threads, 0); 00029 InitializeCriticalSection(&mMutex); 00030 // if (mFree == FALSE || mUsed == FALSE) 00031 // mOk = false; 00032 // else 00033 // mOk = true; 00034 } 00035 00039 EventQueue::~EventQueue() { 00040 DeleteCriticalSection(&mMutex); 00041 // if (mUsed != FALSE) 00042 // CloseHandle(mUsed); 00043 // if (mFree != FALSE) 00044 // CloseHandle(mFree); 00045 } 00046 00052 void EventQueue::Push(Event * event) { 00053 // if (!mOk) 00054 // return; 00055 // WaitForSingleObject(mFree, INFINITE); 00056 { 00057 Guard g(mMutex); 00058 mQue.push(event); 00059 } 00060 // ReleaseSemaphore(mUsed, 1, 0); 00061 } 00062 00068 Event* EventQueue::Pop() { 00069 Event * event = NULL; 00070 // if (!mOk) 00071 // return NULL; 00072 // WaitForSingleObject(mUsed, INFINITE); 00073 { 00074 Guard g(mMutex); 00075 if (!mQue.empty()) { 00076 event = mQue.front(); 00077 mQue.pop(); 00078 } 00079 } 00080 // ReleaseSemaphore(mFree, 1, 0); 00081 return event; 00082 } 00083 00089 int EventQueue::Size() { 00090 Guard g(mMutex); 00091 return mQue.size(); 00092 } 00093 00099 bool EventQueue::IsOk() { 00100 // return mOk; 00101 return true; 00102 } 00103
1.2.17