ACE学习笔记(二)--消息队列(简介)

    在ACE中,消息作为消息块(Message Block)被放入消息队列中。每个 消息块“(类名为ACE_Message_Block)包含”一个头和一个数据块。它持有指向两者的指针,包含只是逻辑上的。 数据块(类名为ACE_Data_Block)持有指向实际的数据缓冲区的指针。这样的设计带来了多个消息块之间的数据的灵活共享,无需带来数据拷贝的开销就可以将同一数据放入不同的队列中。
ACE_Message_Block的构造器:
ACE_Message_Block的构造器为:
ACE_Message_Block (size_t size,    
// 数据缓冲区大小
ACE_Message_Type type  =  MB_DATA,  // 消息类型
ACE_Message_Block  * cont  =   0 ,     // 指向“片段链”中的下一个消息块的指针,缺省值为0,表示不使用链
const   char   * data  =   0 ,     // 指向要存储在此消息块中的数据缓存区的指针,若为0,则根据 size创建缓存区,并由该消息块管理,同生死
                                      
// 若不为空,消息块被销毁时它不会删除数据缓存区。牢记!!!
ACE_Allocator  * allocator_strategy  =   0 ,    // 分配数据缓存的分配策略,在第四个参数为空时使用
ACE_Lock  * locking_strategy  =   0 ,          // 锁策略,不为0,用于保护访问共享状态的代码区
u_long priority  =   0 ,                                 // 这三个参数用于ACE中的实时消息队列的调度,保留缺省值
const  ACE_Time_Value  &  execution_time  =  ACE_Time_Value::zero,
const  ACE_Time_Value  &  deadline_time  =  ACE_Time_Value::max_time);

 消息块的构造器允许:创建并传入你自己的指向消息数据的数据块、传入指向消息数据的指针,消息块将创建并设置底层的数据块。
下面的例子岩石怎样将指向消息数据的指针传给消息块,以及ACE_Message_Block怎样创建和管理底层的ACE_Data_Block:
// 数据块
char  data[size];
data 
=   " This is my data " ;
// 创建消息块去管理数据块
ACE_Message_Block  * mb  =   new  ACE_Message_Block(data,blocksize)
该构造器创建底层数据块,并将它设置为指向传递给它的数据的开头。被创建的消息块并不拷贝该数据,也不假定自己拥有它的所有权。这就意味着在消息块mb被销毁时,相关联的数据缓冲区data将不会被销毁。这是有意义的:消息块没有拷贝数据,因此内存也不是它分配的,这样它也不应该负责销毁它。

你可能感兴趣的:(ACE学习笔记(二)--消息队列(简介))