消息队列模板类

消息队列模板类

ID:39619711

大小:32.00 KB

页数:4页

时间:2019-07-07

消息队列模板类_第1页
消息队列模板类_第2页
消息队列模板类_第3页
消息队列模板类_第4页
资源描述:

《消息队列模板类》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、消息队列模板类templateclassTMessageQueue{public:vectorqueue;//存储消息的队列pthread_mutex_tmutex;sem_tsem;public:TMessageQueue(){pthread_mutex_init(&mutex,NULL);sem_init(&sem,0,0);}~TMessageQueue(){pthread_mutex_destroy(&mutex);sem_destroy(&sem);FreeQueue();}/*将记录插入消息队列的尾部,正常情况下,放在队列尾部,从头部

2、取*/voidAddElement(TDatapData){Lock();queue.push_back(pData);SetQueueEvent();Unlock();}/*将记录放在队列的头部,当外部请求取消、断开、异常退出时,接入层将消息放入队列的头部,分发时,将还没有处理的相应消息从队列中删除,将取消的消息放入业务线程的接收队列,业务线程进行释放处理*/voidAddElementAtFront(TDatapData){Lock();queue.insert(queue.begin());//push_back(pData);SetQueueEvent();Unlock();

3、}intcount(){returnqueue.size();}/*从队列头部取一条记录*/TDataGetElement(){WaitQueueEvent();TDatap;//=NULL;//vector::iteratorit;memset(&p,0,sizeof(TData));Lock();if(false==queue.empty()){p=*queue.begin();queue.erase(queue.begin());}Unlock();returnp;}TDataGetElement(intdd){if(dd==1)WaitQueueEvent();

4、TDatap;//=NULL;//vector::iteratorit;memset(&p,0,sizeof(TData));Lock();if(false==queue.empty()){p=*queue.begin();queue.erase(queue.begin());}Unlock();returnp;}private:/*操作之前加锁处理*/voidLock(){pthread_mutex_lock(&mutex);}/*操作之后解锁处理*/voidUnlock(){pthread_mutex_unlock(&mutex);}/*设置事件,触发线程中的处理*

5、/voidSetQueueEvent(){sem_post(&sem);}voidWaitQueueEvent(){#ifdefLINUX#undef_WITH_DBG#ifndef_WITH_DBGsem_wait(&sem);#elseintoldvalue=0;intnewvalue=0;do{sem_getvalue(&sem,&oldvalue);}while(oldvalue==0);while(1){sem_trywait(&sem);sem_getvalue(&sem,&newvalue);if(newvalue

6、放队列,不释放数据?*/voidFreeQueue(){queue.clear();}};

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。