ACE_Task的生产者和消费者

#include "ace/Task.h"
#include "ace/Message_Block.h"
#include "ace/OS.h"

const int N = 10;

//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, 3);
		return 0;
	}
	//The Service Processing routine
	int svc(void) {
		ACE_Message_Block* mb = 0;
		for (;;) {
			mb = 0;
			getq(mb);//Get message from underlying queue
			if (*mb->rd_ptr() < N) {
				ACE_DEBUG(
					(LM_DEBUG, "(%t)Got message: %d from remote task\n", *mb->rd_ptr()));
			}
			else if (*mb->rd_ptr() == N) {
				ACE_DEBUG(
					(LM_DEBUG, "(%t)Got message: %d from remote task\n", *mb->rd_ptr()));
				++*mb->rd_ptr(); // *mb->rd_ptr() == N+1
				ungetq(mb);
				break;// 供后续线程查看
			}
			else { // *mb->rd_ptr() > N
				ungetq(mb);
				break;// 供后续线程查看
			}
		}
		return 0;
	}
	int close(u_long) {
		ACE_DEBUG((LM_DEBUG, "(%t)Consumer closes down \n"));
		return 0;
	}
};

class Producer : public ACE_Task_Base {
public:
	Producer(Consumer * consumer) :
		data_(0), consumer_(consumer) {
		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_ <= N) {
			//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, "(%t)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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值