sogo6 发表于 2013-1-28 18:21:23

用ACE实现生产者与消费者模式

#include "ace/OS.h" #include "ace/Task.h" #include "ace/Message_Block.h"//The Consumer Task. class Consumer: public ACE_Task<ACE_MT_SYNCH> { public: int open(void*) { ACE_DEBUG((LM_DEBUG, "(%t) Consumer task opened \n"));//Activate the Task activate(THR_NEW_LWP,1);return 0; }//The Service Processing routine int svc(void) { //Get ready to receive message from Producer ACE_Message_Block * mb =0; do { mb=0;//Get message from underlying queue getq(mb); ACE_DEBUG((LM_DEBUG, "(%t)Got message: %d from remote task\n",*mb->rd_ptr())); }while(*mb->rd_ptr()<10);return 0; }int close(u_long) { ACE_DEBUG((LM_DEBUG,"Consumer closes down \n")); return 0; } };class Producer: public ACE_Task<ACE_MT_SYNCH> { public: Producer(Consumer * consumer):   consumer_(consumer), data_(0)   {   mb_=new ACE_Message_Block((char*)&data_,sizeof(data_));   }   int open(void*)   {   ACE_DEBUG((LM_DEBUG, "(%t) Producer task opened \n"));   //Activate the Task   activate(THR_NEW_LWP,1);   return 0;   }   //The Service Processing routine   int svc(void)   {   while(data_<11)   {   //Send message to consumer   ACE_DEBUG((LM_DEBUG,   "(%t)Sending message: %d to remote task\n",data_));   consumer_->putq(mb_);    //Go to sleep for a sec.   ACE_OS::sleep(1);   data_++;   }    return 0;   }    int close(u_long)   {   ACE_DEBUG((LM_DEBUG,"Producer closes down \n"));   return 0;   }private: char data_; Consumer * consumer_; ACE_Message_Block * mb_; };int main(int argc, char * argv[]) { Consumer *consumer = new Consumer; Producer * producer = new Producer(consumer);producer->open(0); consumer->open(0);//Wait for all the tasks to exit. ACE_Thread_Manager::instance()->wait(); return 0;}
页: [1]
查看完整版本: 用ACE实现生产者与消费者模式