以下的代码是对ACE_Message_Queue的遍历方法。
先定义一个学生对象:
#pragma once #include "iostream" using namespace std; class student { public: student(void); student(int number, char* name, int english); ~student(void); public: int number; char name[10]; int english; void output(int i); }; #include "stdafx.h" #include "student.h" student::student(void) { } student::student(int number, char* name, int english) { this->number = number; strcpy(this->name, name); this->english = english; } student::~student(void) { } void student::output(int i) { if (i == 1) { cout<<"insert " << "number=" << number << " name=" << name << " english=" << english <<endl; } else if( i == 2) { cout<<"delete " << "number=" << number << " name=" << name << " english=" << english <<endl; } else if( i == 3) { cout<<"scan " << "number=" << number << " name=" << name << " english=" << english <<endl; } }
再定义一个学生队列的对象:
#pragma once #include "ace/Message_Queue.h" #include "ace/Synch.h" #include "iostream" #include "student.h" using namespace std; class studentqueue { public: studentqueue(void); ~studentqueue(void); private: ACE_Message_Queue<ACE_MT_SYNCH> mq; public: int insertinto(student stu); int deletefrom(int number); int update(int number, int english); int scan(); }; #include "stdafx.h" #include "studentqueue.h" studentqueue::studentqueue(void) { } studentqueue::~studentqueue(void) { } int studentqueue::insertinto(student stu) { int length = sizeof(stu); ACE_Message_Block *mb = new ACE_Message_Block(length, ACE_Message_Block::MB_DATA); mb->copy((char*)&stu, length); return mq.enqueue(mb); } int studentqueue::deletefrom(int number) { ACE_Message_Block *mb; ACE_Message_Queue_Iterator<ACE_MT_SYNCH> LI(mq); while(LI.next(mb)) { student* pstu = (student*)mb->base(); LI.advance(); } return 0; } int studentqueue::scan() { ACE_Message_Block *mb; mq.peek_dequeue_head(mb); do { student* pstu = (student*)mb->base(); pstu->output(3); } while(mb = mb->next()); return 0; } int studentqueue::update(int number, int english) { ACE_Message_Block *mb; mq.peek_dequeue_head(mb); do { student* pstu = (student*)mb->base(); if (pstu->number == number) { pstu->english = english; } } while(mb = mb->next()); return 0; }
主函数进行测试:
// scanACEMessageQueue.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "studentqueue.h" int _tmain(int argc, _TCHAR* argv[]) { studentqueue sq; for(int i = 0; i < 10; i++) { student stu(i, "wangxu", i * 10); sq.insertinto(stu); } sq.deletefrom(1); sq.scan(); system("pause"); return 0; }