linux平台
int WorkQueue::AddWork(Work* work) {
printf("WorkQueue::AddWork\n");
pthread_mutex_lock(&mutex);
works.push_back(work);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
return 0;
// TODO: Íê³É´úÂë
}
Work* WorkQueue::GetWork() {
// TODO: Íê³É´úÂë
printf("WorkQueue::GetWork\n");
pthread_mutex_lock(&mutex);
while(works.empty()){
if(shutdown){
pthread_mutex_unlock(&mutex);
return NULL;
}
printf("pthread_cond_wait ing...\n");
pthread_cond_wait(&cond, &mutex);
printf("pthread_cond_wait done \n");
}
Work* getwork = works.front();
works.pop_front();
pthread_mutex_unlock(&mutex);
return getwork;
}
windows平台:
int WorkQueue::AddWork(Work* work) {
printf("WorkQueue::AddWork\n");
WaitForSingleObject(hMutex, INFINITE);
printf("add a work \n");
works.push_back(work);
SetEvent(hEvent);//single only one
ReleaseMutex(hMutex);
return 0;
// TODO: 完成代码
}
Work* WorkQueue::GetWork() {
// TODO: 完成代码
printf("WorkQueue::GetWork\n");
WaitForSingleObject(hMutex, INFINITE);
while(works.empty()){
if(shutdown){
ReleaseMutex(hMutex);
SetEvent(hEvent);
return NULL;
}
printf("pthread_cond_wait ing...\n");
SignalObjectAndWait(hMutex, hEvent, INFINITE, FALSE);
WaitForSingleObject(hMutex, INFINITE);
}
printf("get a work \n");
Work* getwork = works.front();
works.pop_front();
ReleaseMutex(hMutex);
return getwork;
}