ACE_Message_Block和ACE_Message_Queue问答
来源:互联网 发布:qq堂for mac 编辑:程序博客网 时间:2024/04/28 22:17
1、ACE_Message_Block::release (void)
- 这个函数有返回值吗?返回什么?
这个函数的确有返回值,返回类型为ACE_Message_Block *,不过在实现的时候恒返回NULL指针。
- 这个函数和析构函数有什么区别?多次调用安全吗?
析构函数无论是变量退栈还是由delete释放堆上分配对象,都会被调用。这个函数只适用于堆上分配的对象。调用release会使对象的引用计数减1,如果对象引用计数降为0,则删除对象,释放空间。release函数与使用delete函数的另一个重要区别是,release会释放消息块链上的所有Message_Block,如果使用delete只会删除当前的Message_Block,链上其它的消息块需要用户手动删除。
ACE_Message_Block *mb1, *mb2; ACE_NEW_RETURN (mb1, ACE_Message_Block (100), -1); std::auto_ptr <ACE_Message_Block> ptr (mb1); // 使用auto_ptr需包含头文件 <memory> ACE_NEW_RETURN (mb2, ACE_Message_Block (100), -1); ptr.release (); mb1->cont (mb2); //释放mb1和mb2指向的内存。 //如果调用delete mb1; 则仍需调用delete mb2; 否则将造成内存泄露 mb1->release ();这个函数多次被调用是安全的。
2、ACE_Message_Queue<ACE_SYNCH_USE>::dequeue_head (...)
- 这个函数第二个参数有默认值(ACE_Time_Value *timeout = 0)
第二个参数指定一个取消息块的超时时间,这个值是绝对值。如果第二个参数为0,则此函数将一直阻塞下去,直到有可取的消息块或发生错误为止。
3、ACE_Message_Block::clone和ACE_Message_Block::duplicate
ACE_Message_Block::clone是深拷贝,复制出来的对象拥有自己的存储区,ACE_Message_Block::duplicate是浅拷贝,只对原消息块的内存区增加引用计数。注clone和duplicate都会拷贝整个消息链。
4、ACE_Message_Block::length(void)、ACE_Message_Block::size(void)、ACE_Message_Block::capacity(void)
- 这几个函数有什么区别
length (void)返回未读消息的长度,即wr_ptr - rd_ptr的长度;size(void)返回数据块的当前大小;capacity (void)返回数据块的最大大小。
ACE_Message_Block mb (100); mb.wr_ptr (80); mb.rd_ptr (60); mb.size (90); // 重新设置当前数据块大小 cout << mb.length () << endl; // 20 cout << mb.size () << endl; // 90 cout << mb.capacity () << endl; // 100
5、ACE_Message_Block::length (size_t)和ACE_Message_Block::size(size_t)
- 这两个函数有什么区别?
lenth(size_t)用于设置未读消息的大小。这个函数会改变wr_ptr指针的位置,但不改变rd_ptr指针的位置。这个函数和wr_ptr (size_t)函数一样,未作内存越界检查,只是单纯改变了wr_ptr计数。size(size_t)函数可以改变消息块的当前数据块大小。如果参数指定的值小于等于capacity ()函数的返回值,则无需重新分配内存,只是改变size计数,如果size (sizt_t)参数指定的值大于capacity ()函数返回的数据块最大大小,则重新分配内存。
- ACE_Message_Block和ACE_Message_Queue问答
- ACE_Message_Queue
- ACE_Message_Queue
- ACE_Message_Queue
- ACE_Message_Queue
- ACE_Message_Block和ACE_Data_Block
- ACE_Message_Block
- ACE_Message_Block
- ACE_Message_Block
- ACE_Message_Block
- ACE_Message_Block
- ACE_Message_Block功能和实现浅析
- ACE_Message_Block功能和实现浅析
- ACE ACE_Time_Value和ACE_Message_Queue的点滴
- ACE_Message_Queue的超时设置和消息清除
- ACE_Message_Queue和spawn实现(生产者/消费者)(V2.00)
- ACE_Message_Queue例子
- 如何用ace_message_block发送和接收struct结构的数据
- ABAP中CHECKBOX 和LISTBOX的使用(屏幕字段的控制)2
- 解决ASP.NET的“A potentially dangerous Request... value was detected”
- Java程序员基本功----数组
- java swing 学习笔记一(画板Panel )
- 相关子查询 与非相关子查询
- ACE_Message_Block和ACE_Message_Queue问答
- 强大的KMP解释,不懂都难(有图有真相)
- Oracle EBS的基础架构技术
- Keil中Memory Model和Code Rom Size说明
- 鸡蛋饭
- java swing学习笔记二(画布Canvas)
- PC客户端与Android服务端的Socket同步通信(USB)
- Eclipse将java的工程转换为web工程
- IAR error: a declaration cannot have a label