ACE_Message_Queue例子

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值