C++多线程框架(三)--------- 消息队列

本文介绍了一个C++多线程框架中实现的消息队列,使用STL的deque作为基础,结合互斥锁和信号量确保线程安全。作者提供了消息队列的基类CMsgQueue和Linux平台的具体实现CLinuxMsgQueue,通过COperatingSystemFactory工厂类创建实例。在接收和发送消息时,利用信号量进行阻塞和唤醒,确保消息的正确传递。文章提供了一个简单的多线程框架示例,并鼓励读者在github上查看完整代码并参与完善。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


之前,多线程一些基本的东西,包括线程创建,互斥锁,信号量,我们都已经封装,下面来看看消息队列

我们尽量少用系统自带的消息队列(比如Linux的sys/msgqueue),那样移植性不是很强,我们希望的消息队列,在消息打包和提取都是用的标准的C++数据结构,当然,你也可以用链表或者是FIFO,那样得先写个链表或者FIFO出来。


我比较懒,直接用的C++的STL的deque,即双端口队列,这样可靠性有保证,当然,速度可能没有自己写的链表快,但是没关系,使用双端口队列还可以根据你自己的需要将数据插入到队列头或者队列尾,这样在消息有优先级的情况下还是有用的。

消息队列的核心作用其实很简单,一个或多个线程往一个队列后面堆数据,另外的一个线程从队列前面取数据处理,基本操作也只有两个,一个发,一个收,所以,我们定义消息队列基类为:

class CMsgQueue
{
	public:
		CMsgQueue(const char *pName=NULL);
		~CMsgQueue();
		//revice data from message queue
		virtual bool recvMsg(unsigned int &m_msg_code,void *&p_msg)=0;
		//send data to messag
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值