织梦CMS - 轻松建站从此开始!

罗索

一个基本的ACE_Task的生产者消费者示例

jackyhwei 发布于 2010-07-31 17:57 点击:次 
从ACE论文集里面抠出来的一个基本的ACE_Task的生产者消费者示例,改正了几个小BUG。
TAG:

从ACE论文集里面抠出来的,改正了几个小BUG。

#include "ace/Task.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();
 ACE_OS::system("pause");

 return 0;
}

(fanged)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201007/9915.html]
本文出处:fanged.ycool.com 作者:fanged
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容