1    消息队列

ACE消息队列由三个部分组成:消息队列(ACE_Message_Queue)、消息块(ACE_Message_Block)、数据块(ACE_Data_Block)

1.1    ACE_Data_Block:通过计数器来决定数据块释放时是否被删除。只有计数器为0时,对象才会被删除。

1.1.1  构造函数:

 ACE_Data_Block (size_t size,

                                 ACE_Message_Block::ACE_Message_Type msg_type,

                                 const char *msg_data,

                                 ACE_Allocator *allocator_strategy,

                                 ACE_Lock *locking_strategy,

                                 ACE_Message_Block::Message_Flags flags,

                                 ACE_Allocator *data_block_allocator)

可以由对象自己分配内存(msg_data=0),也可以由使用者分配内存(赋值给msg_data),ACE_Data_Block进行管理。

1.1.2  得到数据块指针:

char *base (void) const;

1.1.3  引用数据块:计算器加1

ACE_Data_Block *duplicate (void);

1.1.4  释放数据块:当计算器减1,当计数器变成0后,就销毁数据块。

ACE_Data_Block *release (ACE_Lock *lock = );

1.2    ACE_Message_Block:数据块的引用。由消息队列管理。

1.2.1  构造函数:

由数据块构造消息块:

ACE_Message_Block (ACE_Data_Block *data_block,

                     Message_Flags flags = ,

                     ACE_Allocator *message_block_allocator = );

直接引用数据:

 ACE_Message_Block (const char *data,

                                       size_t size,

                                       unsigned long priority)

 ACE_Message_Block (size_t size,

                                       ACE_Message_Type msg_type,

                                       ACE_Message_Block *msg_cont,

                                       const char *msg_data,

                                       ACE_Allocator *allocator_strategy,

                                       ACE_Lock *locking_strategy,

                                       unsigned long priority,

                                       const ACE_Time_Value &execution_time,

                                       const ACE_Time_Value &deadline_time,

                                       ACE_Allocator *data_block_allocator,

                                       ACE_Allocator *message_block_allocator)

1.2.2  得到数据块指针:

ACE_Data_Block *data_block()

1.2.3  释放消息块:

ACE_Message_Block *release (void)

1.2.4   析构函数:

会调用内部数据块的release

 ACE_Message_Block::~ACE_Message_Block (void)

 {

   ACE_TRACE ("ACE_Message_Block::~ACE_Message_Block");

   if (ACE_BIT_DISABLED (this->flags_,

                         ACE_Message_Block::DONT_DELETE)&&

       this->data_block ())

     this->data_block ()->release ();

   this->prev_ = ;

   this->next_ = ;

   this->cont_ = ;

 }

1.3         ACE_Message_Queue:消息队列

1.3.1  入列

 enqueue (ACE_Message_Block *new_item, ACE_Time_Value *timeout)

 enqueue_head (ACE_Message_Block *new_item, ACE_Time_Value *timeout)

 enqueue_tail (ACE_Message_Block *new_item, ACE_Time_Value *timeout)

1.3.2   出列

 dequeue (ACE_Message_Block *&first_item, ACE_Time_Value *timeout = );

 dequeue_head (ACE_Message_Block *&first_item, ACE_Time_Value *timeout = );

 dequeue_tail (ACE_Message_Block *&dequeued, ACE_Time_Value *timeout = );

1.4         ACE_Task:封装了消息队列:

 // For the following five method if @a timeout == 0, the caller will

   // block until action is possible, else will wait until the

   // <{absolute}> time specified in *@a timeout elapses).  These calls

   // will return, however, when queue is closed, deactivated, when a

   // signal occurs, or if the time specified in timeout elapses, (in

   // which case errno = EWOULDBLOCK).

   /// Insert message into the message queue.  Note that @a timeout uses

   /// <{absolute}> time rather than <{relative}> time.

   int putq (ACE_Message_Block *, ACE_Time_Value *timeout = );

   /**

    * Extract the first message from the queue (blocking).  Note that

    * @a timeout uses <{absolute}> time rather than <{relative}> time.

    * Returns number of items in queue if the call succeeds or -1 otherwise.

    */

   int getq (ACE_Message_Block *&mb, ACE_Time_Value *timeout = );

   /// Return a message to the queue.  Note that @a timeout uses

   /// <{absolute}> time rather than <{relative}> time.

   int ungetq (ACE_Message_Block *, ACE_Time_Value *timeout = );

   /**

    * Turn the message around, sending it in the opposite direction in

    * the stream. To do this, the message is put onto the task next in

    * the stream after this task's sibling.

    *

    * @param mb Pointer to the block that is used in the reply.

    * @param tv The absolute time at which the put operation used to

    *           send the message block to the next module in the stream

    *           will time out. If 0, this call blocks until it can be

    *           completed.

    */

   int reply (ACE_Message_Block *mb, ACE_Time_Value *tv = );

   /**

    * Transfer message to the adjacent ACE_Task in a ACE_Stream.  Note

    * that @a timeout uses <{absolute}> time rather than <{relative}>

    * time.

    */

   int put_next (ACE_Message_Block *msg, ACE_Time_Value *timeout = );

转自:http://blog.csdn.net/kl222/article/details/8159812

ACE消息队列(转)的更多相关文章

  1. 阿里云ACE共创空间——MQ消息队列产品测试

    一.产品背景消息队列是阿里巴巴集团自主研发的专业消息中间件. 产品基于高可用分布式集群技术,提供消息订阅和发布.消息轨迹查询.定时(延时)消息.资源统计.监控报警等一系列消息云服务,是企业级互联网架构 ...

  2. 【微服务专题之】.Net6下集成消息队列上-RabbitMQ

    ​ 微信公众号:趣编程ACE关注可了解更多的.NET日常实战开发技巧,如需源码 请公众号后台留言 源码;[如果觉得本公众号对您有帮助,欢迎关注] .Net中RabbitMQ的使用 [微服务专题之].N ...

  3. 消息队列——RabbitMQ学习笔记

    消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...

  4. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

  5. .net 分布式架构之业务消息队列

    开源QQ群: .net 开源基础服务  238543768 开源地址: http://git.oschina.net/chejiangyi/Dyd.BusinessMQ ## 业务消息队列 ##业务消 ...

  6. 【原创经验分享】WCF之消息队列

    最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...

  7. Java消息队列--ActiveMq 实战

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...

  8. Java消息队列--JMS概述

    1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...

  9. 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)

    Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...

随机推荐

  1. ORM-学生信息系统

    学生信息管理 展示学生信息 URL部分 url(r'^student_list/', app01_views.student_list, name="student_list"), ...

  2. [BZOJ3698] XWW的难题 网络流

    3698: XWW的难题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 533  Solved: 275[Submit][Status][Discus ...

  3. 在servlet中返回json数据

    在servlet: String name = new tring(request.getParameter("name").getBytes("iso8859-1&qu ...

  4. docker 与 yarn

    有时我们的项目是使用yarn去发布的,当需要使用docker发布这个项目时,安装yarn是必须的,但是平时使用的npm install -g yarn此时却不可用 从网站上找到解决的方法 地址:htt ...

  5. HDU 2824.The Euler function-筛选法求欧拉函数

    欧拉函数: φ(n)=n*(1-1/p1)(1-1/p2)....(1-1/pk),其中p1.p2…pk为n的所有素因子.比如:φ(12)=12*(1-1/2)(1-1/3)=4.可以用类似求素数的筛 ...

  6. 洛谷P3926 SAC E#1 - 一道不可做题 Jelly【模拟/细节】

    P3926 SAC E#1 - 一道不可做题 Jelly [链接]:https://www.luogu.org/problem/show?pid=3926 题目背景 SOL君(炉石主播)和SOL菌(完 ...

  7. POJ 2018 Best Cow Fences

    斜率优化. 设$s[i]$表示前缀和,$avg(i,j)=(s[j]-s[i-1])/(j-(i-1))$.就是$(j,s[j])$与$(i-1,s[i-1])$两点之间的斜率. 如果,我们目前在计算 ...

  8. CentOS 7.1 中文正式版下载 - 最流行的免费开源企业级 Linux 服务器操作系统

    如果说 Ubuntu 是现今最受桌面用户欢迎的 Linux 操作系统,那么 CentOS 就是最受公司.企业.IDC 喜爱的 Linux 发行版了.得益于极为出色的稳定性,全球范围内无数著名网站均选用 ...

  9. [LA 3942] Remember the Word

    Link: LA 3942 传送门 Solution: 感觉自己字符串不太行啊,要加练一些蓝书上的水题了…… $Trie$+$dp$ 转移方程:$dp[i]=sum\{ dp[i+len(x)+1]\ ...

  10. 【线性筛】【筛法求素数】【素数判定】URAL - 2102 - Michael and Cryptography

    暴力搞肯定不行,因此我们从小到大枚举素数,用n去试除,每次除尽,如果已经超过20,肯定是no.如果当前枚举到的素数的(20-已经找到的质因子个数)次方>剩下的n,肯定也是no.再加一个关键的优化 ...