ACE_Task的生产者和消费者
来源:互联网 发布:单片机开发视频 编辑:程序博客网 时间:2024/04/28 10:35
#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 Taskactivate(THR_NEW_LWP, 3);return 0;}//The Service Processing routineint svc(void) {ACE_Message_Block* mb = 0;for (;;) {mb = 0;getq(mb);//Get message from underlying queueif (*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+1ungetq(mb);break;// 供后续线程查看}else { // *mb->rd_ptr() > Nungetq(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 Taskactivate(THR_NEW_LWP, 1);return 0;}//The Service Processing routineint svc(void) {while (data_ <= N) {//Send message to consumerACE_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
- ACE_Task的生产者和消费者
- ACE_Task介绍(生产者/消费者)
- ACE_Task介绍(生产者/消费者)v3.0
- kafka的生产者和消费者的理解
- zthread的使用9:生产者和消费者
- 多线程Thread生产者和消费者的问题
- C#多线程的生产者和消费者
- 多线程 消费者和生产者的问题
- 线程中的生产者和消费者的模拟
- 线程同步:生产者和消费者的问题
- 关于线程生产者和消费者的问题
- 多线程之间的通信生产者和消费者
- 生产者和消费者引出的多线程通信
- C#多线程的生产者和消费者
- 生产者和消费者的多线程问题
- 生产者和消费者问题的Java实现
- 多线程的生产者和消费者问题
- 生产者和消费者的代码片段
- C++操作MySQL
- OJ--统计男同学的个数
- 如何面试程序员
- Extjs页面加载非常慢的处理
- linux下的C语言编程注意事项
- ACE_Task的生产者和消费者
- Spring-3.2.4 + Quartz-2.2.0集成实例
- Python3 MQ
- Java设计模式透析之 —— 适配器(Adapter)
- forecast包仅支持ts对象?
- 我眼中的 VIOS
- jquery的本地儲存
- 巧用中括号进行CGSize和CGRect的初始化
- 程序员的“纪律性”