#include <ace/OS.h>
#include <ace/Message_Block.h>
#include <ace/ACE.h>
#include <ace/Message_Queue.h>
#include <ace/Synch.h>
class QTest{
public:
QTest(int num_msgs):no_msgs_(num_msgs)
{
ACE_TRACE("QTest::QTest");
if (!(this->mq_=new ACE_Message_Queue<ACE_NULL_SYNCH>() ))
ACE_DEBUG((LM_ERROR, "Error in message queue initialization\n"));
}
int enq_msgs()
{
ACE_TRACE("QTest::enq_msg");
for(int i=0; i<no_msgs_; i++)
{
ACE_Message_Block *mb;
ACE_NEW_RETURN(mb, ACE_Message_Block(30), -1);
ACE_OS::sprintf(mb->wr_ptr(),"This is message %d\n", i);
mb->wr_ptr(ACE_OS::strlen(mb->wr_ptr()));
ACE_Message_Block *test = new ACE_Message_Block(mb->rd_ptr(), mb->length());
if(this->mq_->enqueue_tail(mb)==-1)
{
ACE_DEBUG((LM_ERROR,"\nCould not enqueue on to mq!!\n"));
return -1;
}
}
return 0;
}
void read_reverse()
{
ACE_DEBUG((LM_INFO,"Beginning Reverse Read\n"));
ACE_Message_Block * mb;
ACE_Message_Queue_Reverse_Iterator<ACE_NULL_SYNCH> mq_rev_iter_(*mq_);
while(mq_rev_iter_.next(mb))
{
mq_rev_iter_.advance();
ACE_DEBUG((LM_INFO,"Read data %s\n", mb->rd_ptr()));
}
}
int deq_msgs()
{
ACE_TRACE("QTest::dequeue_all");
ACE_DEBUG((LM_INFO,"Messages on Q:%d Bytes on Q:%d \n"
,mq_->message_count(),mq_->message_bytes()));
ACE_Message_Block *mb;
for(int i=0;i <no_msgs_; i++)
{
mq_->dequeue(mb);
ACE_DEBUG((LM_INFO,"Dd data %s\n", mb->rd_ptr() ));
mb->release();
}
return 0;
}
private:
ACE_Message_Queue<ACE_NULL_SYNCH> * mq_;
int no_msgs_;
};
int main(int argc, char *argv[])
{
if(argc <2)
ACE_ERROR_RETURN((LM_ERROR, "Usage %s num_msgs", argv[0]), -1);
QTest test(ACE_OS::atoi(argv[1]));
if(test.enq_msgs() == -1)
ACE_ERROR_RETURN( (LM_ERROR,"Program failure \n"), -1);
test.read_reverse();
test.deq_msgs();
return 0;
}
ACE_Message_Queue例子
最新推荐文章于 2017-08-01 16:12:00 发布