欢迎来到天天文库
浏览记录
ID:40557947
大小:55.50 KB
页数:6页
时间:2019-08-04
《Linux高级环境编程实验报告3》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、作业报告学生姓名:学号:指导教师:学生E-mail:一、作业名称:自定义消息队列二、作业要求自行设计一个消息队列(不能依赖已有库的队列),实现一般队列的操作:入列、出列以及队列判空,另外要保证线程安全,并且能够接收CLMessage类继承体系的消息;需要提供发送消息的通信类,以及循环消息的管理类,保证能够支持线程之间的通信。三、设计与实现根据要求分析,首先不能依赖已有库的队列,我们可以利用单链表来创建一个队列,对于消息的出队与入队操作,需要设定两个指针,头指针和尾指针,分别指向队头和队尾,根据队
2、列的要求,队头处只能读(出队),队尾只能写(入队)。对于判空操作,设定队头指针等于队尾指针时为空。代码清单3.1自定义队列的实现structCLNode//链表节点{Tdata;structCLNode*next;};templateclassCLMyQueue{private:structCLNode*QueueHead;//队头指针structCLNode*QueueTail;//队尾指针public:CLMyQueue();~CLMyQueue();voidPu
3、sh(Tdata);//数据入队操作TPop();//数据出队操作boolIsEmpty();//不能从空队列读数据,因此需进行队列判空};templateCLMyQueue::CLMyQueue()//构造函数中对队列进行初始化操作,队头、队尾置空{QueueHead=NULL;QueueTail=NULL;}templateCLMyQueue::~CLMyQueue()//析构函数清空队列中的所有数据{while(QueueHead!=NULL)/
4、/队头不为空,则清除队头,继续找队头的后继结点,删除所有的结点数据{structCLNode*t=QueueHead;QueueHead=QueueHead->next;deletet;}}templatevoidCLMyQueue::Push(Tdata)//数据入队操作{if(IsEmpty())//如果队列为空,将数据入队,并且队头和队尾指针都指向该数据{QueueHead=newstructCLNode;QueueHead->data=data;Queu
5、eTail=QueueHead;return;}//在队尾插入数据structCLNode*newNode=newstructCLNode;newNode->data=data;newNode->next=NULL;QueueTail->next=newNode;QueueTail=newNode;}templateTCLMyQueue::Pop()//数据出队操作{if(IsEmpty())//不能从空队列中读数据,因此判定队列是否为空,空则返回空指针{ret
6、urnNULL;}Tdata=QueueHead->data;//取出对头数据,并修改队头指针structCLNode*t=QueueHead;QueueHead=QueueHead->next;deletet;returndata;}templateboolCLMyQueue::IsEmpty()//判断队列是否为空{if(QueueHead==NULL)//当队头指针为空时,队列为空{returntrue;}returnfalse;}代码清单3.1给出了自定义消息
7、队列的实现。开始定义了单链表结点的结构。在自定义队列类CLMyQueue中给出了入队和出队的操作,分别是Push和Pop函数,当然,要注意一些细节,在出队时要判断队列是否为空,若为空则无法进行出队操作,同样在进行入队操作是要判断是否队满。四、测试自定义两个CLMessage类的继承体,封装乘法操作的CLMultipMessage消息类和CLQuitMessage退出消息类,定义子线程的回调函数,即子线程的执行体。在main()函数中,创建子线程,主线程向消息队列传递CLSUBMessage消息和
8、CLQuitMessage消息。子线程从队列中获取消息,并执行相应消息体操作如减法操作和退出操作。代码清单4.1测试代码classCLMsgPro;classCLMultipMessage:publicCLMessage//继承CLMessage的乘法消息{public:friendclassCLMsgPro;CLMultipMessage(intOp1,intOp2):CLMessage(MULTIP_MSG)//构造函数初始化{m_Op1=Op1;m_Op2=Op2;}virtual~CLM
此文档下载收益归作者所有