﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-PeakGao-随笔分类-C++技术</title><link>http://www.cppblog.com/PeakGao/category/1930.html</link><description>别读成痞子高</description><language>zh-cn</language><lastBuildDate>Fri, 14 Nov 2008 21:03:34 GMT</lastBuildDate><pubDate>Fri, 14 Nov 2008 21:03:34 GMT</pubDate><ttl>60</ttl><item><title>安全的list</title><link>http://www.cppblog.com/PeakGao/archive/2008/11/15/66969.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Fri, 14 Nov 2008 17:41:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2008/11/15/66969.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/66969.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2008/11/15/66969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/66969.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/66969.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 支持安全遍历的list，可以在遍历的过程中增删任何节点&nbsp;&nbsp;<a href='http://www.cppblog.com/PeakGao/archive/2008/11/15/66969.html'>阅读全文</a><img src ="http://www.cppblog.com/PeakGao/aggbug/66969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2008-11-15 01:41 <a href="http://www.cppblog.com/PeakGao/archive/2008/11/15/66969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决Windows 程序界面闪烁问题的一些经验</title><link>http://www.cppblog.com/PeakGao/archive/2007/11/21/37109.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Wed, 21 Nov 2007 14:51:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/11/21/37109.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/37109.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/11/21/37109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/37109.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/37109.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/PeakGao/archive/2007/11/21/37109.html'>阅读全文</a><img src ="http://www.cppblog.com/PeakGao/aggbug/37109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-11-21 22:51 <a href="http://www.cppblog.com/PeakGao/archive/2007/11/21/37109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有意转让搜索引擎</title><link>http://www.cppblog.com/PeakGao/archive/2007/11/10/36276.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Sat, 10 Nov 2007 04:09:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/11/10/36276.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/36276.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/11/10/36276.html#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/36276.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/36276.html</trackback:ping><description><![CDATA[本人前段时间写了一个小的搜索引擎，效果跟百度特像，基本没有什么区别，除了没有广告系统外，但是是小搜索引擎，所以不能胜任大型搜索服务，程序是按通用搜索写的，可以稍做改动变成一个垂直搜索引擎。本人愿意低价出售该引擎，或者也可以采取合作的方式。其中蜘蛛的爬行效率是很高的，分词速度也特别快，我专门测试过，所有代码都是c++实现。有意者可跟我联系QQ87828577<br>合作方式：<br>1、可以只提供蜘蛛程序，并定制成企业的特殊需要，如将搜集的信息经过解析，按要求的字段形式存入数据库；<br>2、可以稍加改动成一个垂直搜索引擎；<br>3、可以提供搜索领域的idea，如果idea可行，本人可以合作方式实现该idea；<br>4、可以提供整套服务，包括蜘蛛、分词、索引、搜索服务；<br><br>&nbsp;<img height=656 alt="" src="http://www.cppblog.com/images/cppblog_com/peakgao/search1.jpg" width=804 border=0><br><img height=656 alt="" src="http://www.cppblog.com/images/cppblog_com/peakgao/search2.jpg" width=804 border=0><br>&nbsp; <br>郁闷，感觉cppblog的人气不够，是不是考虑搬家到csdn呢？奇怪了cppblog删贴？ 
<img src ="http://www.cppblog.com/PeakGao/aggbug/36276.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-11-10 12:09 <a href="http://www.cppblog.com/PeakGao/archive/2007/11/10/36276.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACE中ACE_Message_Block的缓存处理 － 续篇</title><link>http://www.cppblog.com/PeakGao/archive/2007/10/29/35439.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Mon, 29 Oct 2007 04:57:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/10/29/35439.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/35439.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/10/29/35439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/35439.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/35439.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前面写了几篇文章了，最后的目的之一就是为了缓存ACE_Message_Block，代码简单，应该比先前的（《ACE中ACE_Message_Block的缓存处理》）实现要好，先前在使用不当的情况下会有问题的，如clone// MessageBlockManager.h/**//**&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;@date&nbsp;2007.10.28&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/PeakGao/archive/2007/10/29/35439.html'>阅读全文</a><img src ="http://www.cppblog.com/PeakGao/aggbug/35439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-10-29 12:57 <a href="http://www.cppblog.com/PeakGao/archive/2007/10/29/35439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自己实现的一个ACE内存分配器</title><link>http://www.cppblog.com/PeakGao/archive/2007/10/29/35437.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Mon, 29 Oct 2007 04:48:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/10/29/35437.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/35437.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/10/29/35437.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/35437.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/35437.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 针对我的前两篇文章《基于ACE实现的一个内存池》和《基于ACE实现的一个内存池－续篇》后，发现缓存ACE_Message_Block的时候还是不太方便，然后干脆实现了ACE_Allocator接口，代码如下，利用这个分配器的ACE_Message_Block将会很快贴出来。//MemPoolAllocator.h/**//**&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;@da...&nbsp;&nbsp;<a href='http://www.cppblog.com/PeakGao/archive/2007/10/29/35437.html'>阅读全文</a><img src ="http://www.cppblog.com/PeakGao/aggbug/35437.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-10-29 12:48 <a href="http://www.cppblog.com/PeakGao/archive/2007/10/29/35437.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于ACE实现的一个内存池－续篇</title><link>http://www.cppblog.com/PeakGao/archive/2007/10/29/35435.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Mon, 29 Oct 2007 04:43:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/10/29/35435.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/35435.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/10/29/35435.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/35435.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/35435.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 针对上篇文章《基于ACE实现的一个内存池 》，今天我进行了改版，实之更加方便和合理，代码如下：// MemPoolT.h/**//**&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;@date&nbsp;2007.10.25&nbsp;*&nbsp;&nbsp;@author&nbsp;PeakGao&nbsp;&lt;peakgao163@163.com&gt;&nbsp;*/...&nbsp;&nbsp;<a href='http://www.cppblog.com/PeakGao/archive/2007/10/29/35435.html'>阅读全文</a><img src ="http://www.cppblog.com/PeakGao/aggbug/35435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-10-29 12:43 <a href="http://www.cppblog.com/PeakGao/archive/2007/10/29/35435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACE中ACE_Message_Block的缓存处理</title><link>http://www.cppblog.com/PeakGao/archive/2007/10/28/35364.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Sun, 28 Oct 2007 12:38:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/10/28/35364.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/35364.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/10/28/35364.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/35364.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/35364.html</trackback:ping><description><![CDATA[基于我前一篇文章《<a id=_21bb1c643d1a_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl01_TitleUrl href="http://www.cppblog.com/PeakGao/archive/2007/10/28/35360.html"><font color=#0000ff>基于ACE实现的一个内存池</font></a>》的代码，这里是应用，有问题不要打我。。。<br><br>// MessageBlockManager.h<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_67_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_67_Open_Text.style.display='none'; Codehighlighter1_0_67_Closed_Image.style.display='inline'; Codehighlighter1_0_67_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_67_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_67_Closed_Text.style.display='none'; Codehighlighter1_0_67_Open_Image.style.display='inline'; Codehighlighter1_0_67_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_67_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_67_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;@date&nbsp;2007.10.28<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;&nbsp;@author&nbsp;PeakGao&nbsp;&lt;peakgao163@163.com&gt;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#ifndef&nbsp;OM_MESSAGEBLOCKMANAGER_H<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;OM_MESSAGEBLOCKMANAGER_H</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ace</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">thread_mutex.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ace</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">synch_traits.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ace</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">message_block.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MemPoolT.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_263_888_Open_Image onclick="this.style.display='none'; Codehighlighter1_263_888_Open_Text.style.display='none'; Codehighlighter1_263_888_Closed_Image.style.display='inline'; Codehighlighter1_263_888_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_263_888_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_263_888_Closed_Text.style.display='none'; Codehighlighter1_263_888_Open_Image.style.display='inline'; Codehighlighter1_263_888_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;om</span><span id=Codehighlighter1_263_888_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_263_888_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;MessageBlockManager<br><img id=Codehighlighter1_294_884_Open_Image onclick="this.style.display='none'; Codehighlighter1_294_884_Open_Text.style.display='none'; Codehighlighter1_294_884_Closed_Image.style.display='inline'; Codehighlighter1_294_884_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_294_884_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_294_884_Closed_Text.style.display='none'; Codehighlighter1_294_884_Open_Image.style.display='inline'; Codehighlighter1_294_884_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_294_884_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_294_884_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;CachePool</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">ACE_SYNCH_MUTEX</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;MyCachePool;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_373_397_Open_Image onclick="this.style.display='none'; Codehighlighter1_373_397_Open_Text.style.display='none'; Codehighlighter1_373_397_Closed_Image.style.display='inline'; Codehighlighter1_373_397_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_373_397_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_373_397_Closed_Text.style.display='none'; Codehighlighter1_373_397_Open_Image.style.display='inline'; Codehighlighter1_373_397_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyCachePool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mBufPool;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_373_397_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_373_397_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;缓存ACE_Data_Block的缓冲区</span><span style="COLOR: #808080"></span></span><br><img id=Codehighlighter1_423_474_Open_Image onclick="this.style.display='none'; Codehighlighter1_423_474_Open_Text.style.display='none'; Codehighlighter1_423_474_Closed_Image.style.display='inline'; Codehighlighter1_423_474_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_423_474_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_423_474_Closed_Text.style.display='none'; Codehighlighter1_423_474_Open_Image.style.display='inline'; Codehighlighter1_423_474_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyCachePool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDBPool;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_423_474_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_423_474_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;缓存ACE_Data_Block对象本身，由于不能默认构造，所以没有用ObjectPool模版</span><span style="COLOR: #808080"></span></span><br><img id=Codehighlighter1_500_554_Open_Image onclick="this.style.display='none'; Codehighlighter1_500_554_Open_Text.style.display='none'; Codehighlighter1_500_554_Closed_Image.style.display='inline'; Codehighlighter1_500_554_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_500_554_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_500_554_Closed_Text.style.display='none'; Codehighlighter1_500_554_Open_Image.style.display='inline'; Codehighlighter1_500_554_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MyCachePool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMBPool;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_500_554_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_500_554_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;缓存ACE_Message_Block对象本身，由于不能默认构造，所以没有用ObjectPool模版</span><span style="COLOR: #808080"></span></span><br><img id=Codehighlighter1_583_591_Open_Image onclick="this.style.display='none'; Codehighlighter1_583_591_Open_Text.style.display='none'; Codehighlighter1_583_591_Closed_Image.style.display='inline'; Codehighlighter1_583_591_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_583_591_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_583_591_Closed_Text.style.display='none'; Codehighlighter1_583_591_Open_Image.style.display='inline'; Codehighlighter1_583_591_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACE_SYNCH_MUTEX</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mMutex;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_583_591_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_583_591_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;线程同步</span><span style="COLOR: #808080"></span></span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;MessageBlockManager</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;instance();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBlockManager();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">MessageBlockManager();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_699_708_Open_Image onclick="this.style.display='none'; Codehighlighter1_699_708_Open_Text.style.display='none'; Codehighlighter1_699_708_Closed_Image.style.display='inline'; Codehighlighter1_699_708_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_699_708_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_699_708_Closed_Text.style.display='none'; Codehighlighter1_699_708_Open_Image.style.display='inline'; Codehighlighter1_699_708_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_699_708_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_699_708_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;初始化参数</span><span style="COLOR: #808080"></span></span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;create(size_t&nbsp;bufSize,&nbsp;size_t&nbsp;objCount);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_760_769_Open_Image onclick="this.style.display='none'; Codehighlighter1_760_769_Open_Text.style.display='none'; Codehighlighter1_760_769_Closed_Image.style.display='inline'; Codehighlighter1_760_769_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_760_769_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_760_769_Closed_Text.style.display='none'; Codehighlighter1_760_769_Open_Image.style.display='inline'; Codehighlighter1_760_769_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_760_769_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_760_769_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;清除缓冲池</span><span style="COLOR: #808080"></span></span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;clear();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_789_800_Open_Image onclick="this.style.display='none'; Codehighlighter1_789_800_Open_Text.style.display='none'; Codehighlighter1_789_800_Closed_Image.style.display='inline'; Codehighlighter1_789_800_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_789_800_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_789_800_Closed_Text.style.display='none'; Codehighlighter1_789_800_Open_Image.style.display='inline'; Codehighlighter1_789_800_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_789_800_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_789_800_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;分配一个消息块</span><span style="COLOR: #808080"></span></span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACE_Message_Block</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;alloc();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img id=Codehighlighter1_834_846_Open_Image onclick="this.style.display='none'; Codehighlighter1_834_846_Open_Text.style.display='none'; Codehighlighter1_834_846_Closed_Image.style.display='inline'; Codehighlighter1_834_846_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_834_846_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_834_846_Closed_Text.style.display='none'; Codehighlighter1_834_846_Open_Image.style.display='inline'; Codehighlighter1_834_846_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_834_846_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_834_846_Open_Text><span style="COLOR: #808080">///</span><span style="COLOR: #008000">&nbsp;释放指定的消息块</span><span style="COLOR: #808080"></span></span><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;free(ACE_Message_Block</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;mb);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;namespace&nbsp;om</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;OM_MESSAGEBLOCKMANAGER_H</span></div>
<br><br>// MessageBlockManager.cpp<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_67_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_67_Open_Text.style.display='none'; Codehighlighter1_0_67_Closed_Image.style.display='inline'; Codehighlighter1_0_67_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_67_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_67_Closed_Text.style.display='none'; Codehighlighter1_0_67_Open_Image.style.display='inline'; Codehighlighter1_0_67_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_67_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_67_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;@date&nbsp;2007.10.28<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*&nbsp;&nbsp;@author&nbsp;PeakGao&nbsp;&lt;peakgao163@163.com&gt;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MessageBlockManager.h</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_117_1529_Open_Image onclick="this.style.display='none'; Codehighlighter1_117_1529_Open_Text.style.display='none'; Codehighlighter1_117_1529_Closed_Image.style.display='inline'; Codehighlighter1_117_1529_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_117_1529_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_117_1529_Closed_Text.style.display='none'; Codehighlighter1_117_1529_Open_Image.style.display='inline'; Codehighlighter1_117_1529_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;om</span><span id=Codehighlighter1_117_1529_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_117_1529_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;MessageBlockManager</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;MessageBlockManager::instance()<br><img id=Codehighlighter1_177_286_Open_Image onclick="this.style.display='none'; Codehighlighter1_177_286_Open_Text.style.display='none'; Codehighlighter1_177_286_Closed_Image.style.display='inline'; Codehighlighter1_177_286_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_177_286_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_177_286_Closed_Text.style.display='none'; Codehighlighter1_177_286_Open_Image.style.display='inline'; Codehighlighter1_177_286_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_177_286_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_177_286_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;MessageBlockManager</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;mbm&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(mbm&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mbm&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;MessageBlockManager();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;mbm;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;MessageBlockManager::MessageBlockManager()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;mMutex(NULL)<br><img id=Codehighlighter1_351_354_Open_Image onclick="this.style.display='none'; Codehighlighter1_351_354_Open_Text.style.display='none'; Codehighlighter1_351_354_Closed_Image.style.display='inline'; Codehighlighter1_351_354_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_351_354_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_351_354_Closed_Text.style.display='none'; Codehighlighter1_351_354_Open_Image.style.display='inline'; Codehighlighter1_351_354_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_351_354_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_351_354_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;MessageBlockManager::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">MessageBlockManager()<br><img id=Codehighlighter1_403_417_Open_Image onclick="this.style.display='none'; Codehighlighter1_403_417_Open_Text.style.display='none'; Codehighlighter1_403_417_Closed_Image.style.display='inline'; Codehighlighter1_403_417_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_403_417_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_403_417_Closed_Text.style.display='none'; Codehighlighter1_403_417_Open_Image.style.display='inline'; Codehighlighter1_403_417_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_403_417_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_403_417_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clear();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;MessageBlockManager::clear()<br><img id=Codehighlighter1_456_579_Open_Image onclick="this.style.display='none'; Codehighlighter1_456_579_Open_Text.style.display='none'; Codehighlighter1_456_579_Closed_Image.style.display='inline'; Codehighlighter1_456_579_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_456_579_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_456_579_Closed_Text.style.display='none'; Codehighlighter1_456_579_Open_Image.style.display='inline'; Codehighlighter1_456_579_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_456_579_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_456_579_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(mMutex)<br><img id=Codehighlighter1_474_576_Open_Image onclick="this.style.display='none'; Codehighlighter1_474_576_Open_Text.style.display='none'; Codehighlighter1_474_576_Closed_Image.style.display='inline'; Codehighlighter1_474_576_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_474_576_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_474_576_Closed_Text.style.display='none'; Codehighlighter1_474_576_Open_Image.style.display='inline'; Codehighlighter1_474_576_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_474_576_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_474_576_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mBufPool.clear();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDBPool.clear();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMBPool.clear();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;mMutex;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMutex&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;MessageBlockManager::create(size_t&nbsp;bufSize,&nbsp;size_t&nbsp;objCount)<br><img id=Codehighlighter1_650_873_Open_Image onclick="this.style.display='none'; Codehighlighter1_650_873_Open_Text.style.display='none'; Codehighlighter1_650_873_Closed_Image.style.display='inline'; Codehighlighter1_650_873_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_650_873_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_650_873_Closed_Text.style.display='none'; Codehighlighter1_650_873_Open_Image.style.display='inline'; Codehighlighter1_650_873_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_650_873_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_650_873_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">mMutex)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMutex&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ACE_SYNCH_MUTEX();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mBufPool.create(bufSize,&nbsp;objCount,&nbsp;mMutex);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDBPool.create(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(ACE_Data_Block),&nbsp;objCount,&nbsp;mMutex);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMBPool.create(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(ACE_Message_Block),&nbsp;objCount,&nbsp;mMutex);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ACE_Message_Block</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;MessageBlockManager::alloc()<br><img id=Codehighlighter1_926_1276_Open_Image onclick="this.style.display='none'; Codehighlighter1_926_1276_Open_Text.style.display='none'; Codehighlighter1_926_1276_Closed_Image.style.display='inline'; Codehighlighter1_926_1276_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_926_1276_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_926_1276_Closed_Text.style.display='none'; Codehighlighter1_926_1276_Open_Image.style.display='inline'; Codehighlighter1_926_1276_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_926_1276_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_926_1276_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;buf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mBufPool.alloc();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACE_Data_Block</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;db&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;::</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;(mDBPool.alloc())&nbsp;ACE_Data_Block(mBufPool.getBlockSize(),&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACE_Message_Block::MB_DATA,&nbsp;static_cast</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000">(buf),&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;ACE_Message_Block::DONT_DELETE,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACE_Message_Block</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;mb&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;::</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;(mMBPool.alloc())&nbsp;ACE_Message_Block(db,&nbsp;ACE_Message_Block::DONT_DELETE);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;mb;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;MessageBlockManager::free(ACE_Message_Block</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;mb)<br><img id=Codehighlighter1_1335_1525_Open_Image onclick="this.style.display='none'; Codehighlighter1_1335_1525_Open_Text.style.display='none'; Codehighlighter1_1335_1525_Closed_Image.style.display='inline'; Codehighlighter1_1335_1525_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1335_1525_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1335_1525_Closed_Text.style.display='none'; Codehighlighter1_1335_1525_Open_Image.style.display='inline'; Codehighlighter1_1335_1525_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1335_1525_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1335_1525_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;不要调用对象的release方法</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mBufPool.free(mb</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ACE_Data_Block</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;db&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;mb</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">data_block();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db</span><span style="COLOR: #000000">-&gt;~</span><span style="COLOR: #000000">ACE_Data_Block();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mDBPool.free(db);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mb</span><span style="COLOR: #000000">-&gt;~</span><span style="COLOR: #000000">ACE_Message_Block();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mMBPool.free(mb);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;namespace&nbsp;om</span></div>
<img src ="http://www.cppblog.com/PeakGao/aggbug/35364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-10-28 20:38 <a href="http://www.cppblog.com/PeakGao/archive/2007/10/28/35364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于ACE实现的一个内存池</title><link>http://www.cppblog.com/PeakGao/archive/2007/10/28/35360.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Sun, 28 Oct 2007 11:54:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/10/28/35360.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/35360.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/10/28/35360.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/35360.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/35360.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天在看ACE内存分配的时候（太多，没看完），发现分配策略不全，我想实现一个能缓存，高效，内存总量不限的分配策略用于对 ACE_Message_Block对象的缓存，虽然ACE_Message_Block支持为它设置三种分配器，一个是对ACE_Message_Block对象本身message_block_allocator_，一个是对ACE_Data_Block本身data_block_alloc...&nbsp;&nbsp;<a href='http://www.cppblog.com/PeakGao/archive/2007/10/28/35360.html'>阅读全文</a><img src ="http://www.cppblog.com/PeakGao/aggbug/35360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-10-28 19:54 <a href="http://www.cppblog.com/PeakGao/archive/2007/10/28/35360.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACE的内存分配介绍（一）</title><link>http://www.cppblog.com/PeakGao/archive/2007/10/28/35359.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Sun, 28 Oct 2007 11:42:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/10/28/35359.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/35359.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/10/28/35359.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/35359.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/35359.html</trackback:ping><description><![CDATA[<p>这段时间在看ACE，以前看过，都好久了，已经记不起什么东西了，不好对它评价，又好又不好。。。<br><br>今天看了下它的内存分配，做了点记录，同大家一起分享下，还没看完，没有讲到的别问我。。。<br><br>一、内存分配器相关<br><br>ACE_Allocator<br>基类<br></p>
<p>ACE_New_Allocator : public ACE_Allocator<br>传统的new和delete的动态内存分配器，主要方法：<br>malloc 分配一定大小的内存，实质就是new char[nbytes]；<br>calloc 同上，但带内存初始化<br>free 释放指定的内存块，实质就是delete[] ptr;<br></p>
<p>ACE_Static_Allocator_Base : public ACE_Allocator<br>静态内存分配器，一次性分配一个大内存，比如200M，然后在200M内分配(已经不能叫分配了)指定大小的内存块<br>成员：<br>char *buffer_; /// 缓冲区首地址<br>size_t size_;&nbsp; /// 缓冲区的大小<br>size_t offset_;/// 当前分配位置</p>
<p>主要方法：<br>malloc 分配一定大小的内存，实质就是buffer_ + offset_ + nbytes，当超过size_时分配失败<br>calloc 同上，但带内存初始化<br>free 释放指定的内存块，实质是空操作<br>从实质来看只适合预知消耗内存大小而且一般不进行释放操作的情况下，因为释放后的内存没有得到应用</p>
<p><br><br>template &lt;class MALLOC&gt;<br>class ACE_Allocator_Adapter : public ACE_Allocator<br>内存分配适配器，对各种各样的内存分配类进行适配，使之符合ACE_Allocator接口，MALLOC是具体的内存<br>分配实现，比如上面的ACE_New_Allocator，ACE_Static_Allocator_Base和用户自定义的分配器</p>
<p><br>二、空闲列表<br><br>template &lt;class T&gt;<br>class ACE_Cached_Mem_Pool_Node<br>支持可缓存的对象节点，可用于空闲链表(free_list)，实现了set_next和get_next<br>成员：<br>ACE_Cached_Mem_Pool_Node&lt;T&gt;* next_;<br><br></p>
<p>template &lt;class T&gt;<br>class ACE_Free_List<br>模版基类<br>主要方法：<br>add 加入一个节点到空闲链表<br>remove 移除一个空闲节点（给用户使用）<br>size 链表当前有效的空闲节点个数<br>resize 重新设置链表节点个数<br><br></p>
<p>template &lt;class T, class ACE_LOCK&gt;<br>class ACE_Locked_Free_List : public ACE_Free_List&lt;T&gt;<br>带锁策略的空闲列表，其实除了锁策略，它还有其他几个特点：<br>1、可以定制为一个纯空闲列表，就是内部不调用new/delete，由外部处理，在构造时将mode传入<br>ACE_PURE_FREE_LIST即可，默认是ACE_FREE_LIST_WITH_POOL，表示内部在需要时可以调用new/delete进行操作；<br>2、支持水位(water mark)的概念，一个低水位(lwm)，一个高水位(hwm)，水位只对mode为ACE_FREE_LIST_WITH_POOL时起作用<br>3、当节点不够时，支持一次性递增inc个节点（N由用户在构造时传入），只对mode为ACE_FREE_LIST_WITH_POOL时起作用<br>主要方法：<br>add 加入一个节点（可能是用户用完了的节点），如果mode为ACE_PURE_FREE_LIST或者mode为ACE_FREE_LIST_WITH_POOL而size&lt;hwm时允许加入，否则delete掉<br>remove 从空闲链表移除一个节点（给用户使用），当mode为ACE_FREE_LIST_WITH_POOL而size&lt;=lwm时，表示节点数过少，系统会分配inc个节点出来以解燃眉之急，如果是ACE_PURE_FREE_LIST模式，当节点数为0时，remove将返回NULL<br>resize 当mode为ACE_FREE_LIST_WITH_POOL时有意义，resize&gt;size时，分配resize-size个节点，否则释放size-resize个节点</p>
<p>举例：<br>class MyClass<br>{<br>&nbsp;int dummy;<br>public:<br>&nbsp;MyClass() : dummy(99) {}<br>&nbsp;void foo()<br>&nbsp;{<br>&nbsp;&nbsp;std::cout&lt;&lt;dummy&lt;&lt;std::endl;<br>&nbsp;}<br>};</p>
<p>void test()<br>{<br>&nbsp;ACE_Locked_Free_List&lt; ACE_Cached_Mem_Pool_Node&lt; MyClass &gt;, ACE_SYNCH_NULL_MUTEX&gt;&nbsp; freeList; // 用ACE_SYNCH_NULL_MUTEX不需要同步，等同于单线程<br>&nbsp;<br>&nbsp;// 取出一个（分配一个）<br>&nbsp;ACE_Cached_Mem_Pool_Node&lt; MyClass &gt;* node = freeList.remove();<br>&nbsp;MyClass* mc = node.addr();<br>&nbsp;<br>&nbsp;// 用一下<br>&nbsp;mc-&gt;foo();<br>&nbsp;<br>&nbsp;// 不用了，释放掉<br>&nbsp;freeList.add(node);<br>}</p>
<p><br>&nbsp;</p>
<p>三、各种内存分配策略<br>template &lt;class T, class ACE_LOCK&gt;<br>class ACE_Cached_Allocator : public ACE_New_Allocator<br>有缓存功能的动态分配器，采用空闲链表进行节点管理，空闲链表的mode为ACE_PURE_FREE_LIST，即真正的new/delete由ACE_Cached_Allocator自己操作，<br>构造时可指定初始化T节点的个数，节点的大小由sizeof(T)决定，同时进行字节对齐。<br>注意：<br>该分配器内部对T类型没有进行构造和析构，所以不适合class使用，可用于struct，并且该分配器不支持自动增大内存区（也就是pool_成员在构造时就确定了）<br>，当内存不够时，分配会失败。<br>主要成员：<br>char *pool_; /// 内存块<br>ACE_Locked_Free_List&lt;ACE_Cached_Mem_Pool_Node&lt;T&gt;, ACE_LOCK&gt; free_list_;&nbsp; /// 空闲节点管理<br>主要方法：<br>malloc 分配一个T节点，实际就是 return free_list_.remove()-&gt;addr();<br>calloc 同上，但会初始化内存数据<br>free 释放一个T节点，实际就是 free_list_.add ((ACE_Cached_Mem_Pool_Node&lt;T&gt; *) ptr);</p>
<p><br><br>template &lt;class ACE_LOCK&gt;<br>class ACE_Dynamic_Cached_Allocator : public ACE_New_Allocator<br>同上，但是没有T模版参数，多了一个成员chunk_size_，每个节点的大小由用户自行定义，同样不存在构造和析构功能，仅仅停留在固定节点大小的缓冲区的管理，内部没有进行字节对齐。<br><br></p>
<p>template &lt;size_t POOL_SIZE&gt;<br>class ACE_Static_Allocator : public ACE_Static_Allocator_Base<br>基于堆栈的静态内存分配器，POOL_SIZE为堆栈大小<br></p>
<img src ="http://www.cppblog.com/PeakGao/aggbug/35359.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-10-28 19:42 <a href="http://www.cppblog.com/PeakGao/archive/2007/10/28/35359.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++实现的一个类ostringstream的类</title><link>http://www.cppblog.com/PeakGao/archive/2007/06/07/25737.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Thu, 07 Jun 2007 08:30:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/06/07/25737.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/25737.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/06/07/25737.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/25737.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/25737.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 嫌ostringsteam过大，一些功能也不知道怎么用的，小生只好自己实现了一个功能类似的类，基本的常用的功能类似，只是为了我自己用起来更方便，更好驾驭，内置一个一级缓冲区（栈上，用户可以定义大小），用户可以定义缓冲区递增的幅度。在知情（已知不会内存越界）的情况下可以直接对缓冲区进行写入操作，代码没有针对char和wchar_t来做，当然也没有考虑线程安全，有兴趣的朋友可以自己修改。代码在VC8下...&nbsp;&nbsp;<a href='http://www.cppblog.com/PeakGao/archive/2007/06/07/25737.html'>阅读全文</a><img src ="http://www.cppblog.com/PeakGao/aggbug/25737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-06-07 16:30 <a href="http://www.cppblog.com/PeakGao/archive/2007/06/07/25737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++实现的一个缓冲区操作的类iobuffer</title><link>http://www.cppblog.com/PeakGao/archive/2007/06/07/25709.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Thu, 07 Jun 2007 02:36:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/06/07/25709.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/25709.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/06/07/25709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/25709.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/25709.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:     常常需要对缓冲区进行操作，尤其在基于c/s的应用中，需要将一些结构或数据类型“填充”到缓冲区发给服务器（或客户端），而另外一段则需要将缓冲区还原成结构或其他数据类型，发现特别的不爽，所以写了这个iobuffer&nbsp;&nbsp;<a href='http://www.cppblog.com/PeakGao/archive/2007/06/07/25709.html'>阅读全文</a><img src ="http://www.cppblog.com/PeakGao/aggbug/25709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-06-07 10:36 <a href="http://www.cppblog.com/PeakGao/archive/2007/06/07/25709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发布一个正则表达式测试工具</title><link>http://www.cppblog.com/PeakGao/archive/2007/06/01/25271.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Fri, 01 Jun 2007 05:22:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/06/01/25271.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/25271.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/06/01/25271.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/25271.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/25271.html</trackback:ping><description><![CDATA[最近写一个小的搜索引擎，涉及到Html内容的提取，所以开发了这个基于pcre的正则表达式测试工具，基本兼容Perl和PHP，除了没有实现模式，如perl支持/your regex/i&nbsp; 模式，这个工具必须写成2个表达式，一个是"your regex"，另一个是"i"，工具用VC8开发，依赖库自己找。<br><br>下载地址：<br>http://www.cppblog.com/Files/PeakGao/xregex.rar<br><br>被匹配的文本文件支持鼠标拖曳<br><br>正则表达式文本框说明：<br>本文本框支持n个正则表达式描述，你可以只启用选择的某一个正则表达式（依赖上方的复选框），也支持批处理每个正则表达式（只因我是为了测试清除HTML的垃圾内容而开发的，所以提供了这个功能）；<br><br>几个按钮的功能解释一下：<br><br>加载默认表达式：就是将input_regex.txt文件内容读入到正则表达式文本框；<br>加载默认内容：就是将input.txt文件读入内容文本框；<br>执行匹配：就是一项一项的进行匹配，就像记事本的查找功能一样；<br>替换选择文本：不用介绍了吧；<br>单正则全部替换：表示使用正则表达式中的某个正则表达式（如果存在多行），和替换文本来对内容文本框中的内容进行全部替换；<br>多正则全部替换：表示使用正则表达式中的所有表达式和替换文本中的所有文本串（与表达式对应，有10个表达式，就写10个替换文本）对内容文本框中的文本进行依序替换。<br><br>如果有错误发生不要找我，我只是临时开发了给自己测试用的，望见谅。<br><br>演示：<br>如果你正确下载了，程序能运行起来的话，点&#8220;多正则全部替换&#8221;看看效果。<br><br>btw:<br>我用正在表达式清除Html无用信息发现速度慢的不行，自己写了个Html的专用解析器，发现速度比他快上上百倍，真是无话可说。。。
<img src ="http://www.cppblog.com/PeakGao/aggbug/25271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-06-01 13:22 <a href="http://www.cppblog.com/PeakGao/archive/2007/06/01/25271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CEdit &amp; CRichEdit 使用技巧</title><link>http://www.cppblog.com/PeakGao/archive/2007/04/29/23208.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Sun, 29 Apr 2007 12:59:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2007/04/29/23208.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/23208.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2007/04/29/23208.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/23208.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/23208.html</trackback:ping><description><![CDATA[<p><a href="http://blog.csdn.net/lixiaosan/"><font color=#800080 size=2><u>http://blog.csdn.net/lixiaosan/</u></font></a></p>
<p><font color=#800080><u>【原】CEdit &amp; CRichEdit 使用技巧</u></font></p>
<div class=postText>作者：lixiaosan<br>日期：04/07/2006<br><br>注：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_edit1代表ID为IDC_EDIT1的CEdit控件的control类型的变量<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_richedit1代表ID为IDC_RICHEDIT1的CRichEditCtrl控件的control类型的变量<br><br>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">1.设置edit只读属性<br><br></span>&nbsp;&nbsp;&nbsp; 方法一：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_edit1.SetReadOnly(TRUE);<br>&nbsp;&nbsp;&nbsp; 方法二：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0);<br><br>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">2.判断edit中光标状态并得到选中内容(richedit同样适用)<br><br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nStart, nEnd;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString strTemp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_edit1.GetSel(nStart, nEnd);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(nStart == nEnd)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp.Format(_T("光标在%d"), nStart);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox(strTemp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //得到edit选中的内容&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_edit1.GetWindowText(strTemp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strTemp = strTemp.Mid(nStart) - strTemp.Mid(nEnd);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AfxMessageBox(strTemp);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; 注：GetSel后，如果nStart和nEnd，表明光标处于某个位置（直观来看就是光标在闪动）；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果nStart和nEnd不相等，表明用户在edit中选中了一段内容。<br><br>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">3.在edit最后添加字符串<br><br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CString str;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_edit1.SetSel(-1, -1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_edit1.ReplaceSel(str);<br><br>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">4.随输入自动滚动到最后一行(richedit同样适用)<br><br></span>&nbsp;&nbsp;&nbsp; 方法一：（摘自msdn）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // The pointer to my edit.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; extern CEdit* pmyEdit;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nFirstVisible = pmyEdit-&gt;GetFirstVisibleLine();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Scroll the edit control so that the first visible line<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // is the first line of text.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (nFirstVisible &gt; 0)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pmyEdit-&gt;LineScroll(-nFirstVisible, 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; 方法二：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_richedit.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);<br><br>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">5.如何限制edit输入指定字符<br><br></span>&nbsp;&nbsp; 可以从CEdit派生一个类，添加WM_CHAR消息映射。下面一个例子实现了限定输入16进制字符的功能。<br><br>&nbsp;&nbsp; void CMyHexEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)&nbsp;<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( (nChar &gt;= '0' &amp;&amp; nChar &lt;= '9') ||<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (nChar &gt;= 'a' &amp;&amp; nChar &lt;= 'f') ||<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; (nChar &gt;= 'A' &amp;&amp; nChar &lt;= 'F') ||<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nChar == VK_BACK ||&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nChar == VK_DELETE)&nbsp;&nbsp;&nbsp; //msdn的virtual key<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CEdit::OnChar(nChar, nRepCnt, nFlags);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; }<br><br>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">6.如何使用richedit<br><br></span>&nbsp;&nbsp;&nbsp; 添加AfxInitRichEdit();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CxxxApp::InitInstance()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AfxInitRichEdit();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .............<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp; AfxInitRichEdit()功能：装载 RichEdit 1.0 Control (RICHED32.DLL).<br><br>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">7.如何使用richedit2.0 or richedit3.0<br><br></span>&nbsp;&nbsp;&nbsp; 使用原因：由于RichEdit2.0A自动为宽字符（WideChar），所以它可以解决中文乱码以及一些汉字问题<br><br>&nbsp;&nbsp;&nbsp; 方法一：（msdn上的做法，适用于用VC.NET及以后版本创建的工程）<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; To update rich edit controls in existing Visual C++ applications to version 2.0,<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; open the .RC file as text, change the class name of each rich edit control from&nbsp;&nbsp; "RICHEDIT" to&nbsp; "RichEdit20a".<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Then replace the call to AfxInitRichEdit with AfxInitRichEdit2.<br>&nbsp;&nbsp;&nbsp; 方法二：以对话框为例：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1)&nbsp;&nbsp;&nbsp; 增加一全局变量 HMODULE hMod;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)&nbsp;&nbsp;&nbsp; 在CxxxApp::InitInstance()中添加一句hMod = LoadLibrary(_T("riched20.dll"));<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 在CxxxApp::ExitInstance()中添加一句FreeLibrary(hMod);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; (3)&nbsp;&nbsp;&nbsp; &nbsp; 在对话框上放一个richedit，文本方式打开.rc文件修改该richedit控件的类名"RICHEDIT" to&nbsp; "RichEdit20a".<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; (4)&nbsp;&nbsp;&nbsp; &nbsp; 在对话框头文件添加 CRichEditCtrl m_richedit;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 在OnInitDialog中添加 m_richedit.SubclassDlgItem(IDC_RICHEDIT1, this);<br><br>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">8.改变richedit指定区域的颜色及字体<br><br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CHARFORMAT cf;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ZeroMemory(&amp;cf, sizeof(CHARFORMAT));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cf.cbSize = sizeof(CHARFORMAT);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cf.dwEffects = 0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cf.yHeight = 12*12;//文字高度<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cf.crTextColor = RGB(200, 100, 255); //文字颜色<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy(cf.szFaceName ,_T("隶书"));//设置字体<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_richedit1.SetSel(1, 5); //设置处理区域<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_richedit1.SetSelectionCharFormat(cf);<br><br>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">9.设置行间距（只适用于richedit2.0）<br><br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PARAFORMAT2 pf;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pf2.cbSize = sizeof(PARAFORMAT2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pf2.dwMask = PFM_LINESPACING | PFM_SPACEAFTER;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pf2.dyLineSpacing = 200;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pf2.bLineSpacingRule&nbsp; = 4;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_richedit.SetParaFormat(pf2);<br><br>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">10.richedit插入位图<br><br></span>Q220844：How to insert a bitmap into an RTF document using the RichEdit control in Visual C++ 6.0<br><a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;220844"><font color=#000033 size=2><u>http://support.microsoft.com/default.aspx?scid=kb;en-us;220844</u></font></a><br><a href="http://www.codeguru.com/Cpp/controls/richedit/article.php/c2417/"><font color=#000033 size=2><u>http://www.codeguru.com/Cpp/controls/richedit/article.php/c2417/</u></font></a><br><a href="http://www.codeguru.com/Cpp/controls/richedit/article.php/c5383/"><u><font color=#000033 size=2>http://www.codeguru.com/Cpp/controls/richedit/article.php/c5383/</font></u></a><br><br><u><font size=2><font color=#000033>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr></font></font></u><span style="COLOR: rgb(153,51,0)">11.richedit插入gif动画<br><a href="http://www.codeproject.com/richedit/AnimatedEmoticon.asp"><br></a></span><a><u><font color=#000033 size=2>http://www.codeproject.com/richedit/AnimatedEmoticon.asp</font></u></a><br><br><u><font size=2><font color=#000033>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr></font></font></u><span style="COLOR: rgb(153,51,0)">12.richedit嵌入ole对象<br><br></span><a href="http://support.microsoft.com/kb/141549/en-us"><u><font color=#000033 size=2>http://support.microsoft.com/kb/141549/en-us</font></u></a><br><br><u><font size=2><font color=#000033>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr></font></font></u><span style="COLOR: rgb(153,51,0)">13.使richedit选中内容只读<br><br></span><a href="http://www.codeguru.com/cpp/controls/richedit/article.php/c2401/"><u><font color=#000033 size=2>http://www.codeguru.com/cpp/controls/richedit/article.php/c2401/</font></u></a><br><br><u><font size=2><font color=#000033>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr></font></font></u><span style="COLOR: rgb(153,51,0)">14.打印richedit</span><span style="COLOR: rgb(0,0,0)"><br><br><a href="http://www.protext.com/MFC/RichEdit3.htm"><u><font color=#000033 size=2>http://www.protext.com/MFC/RichEdit3.htm</font></u></a></span><br><a href="http://www.protext.com/MFC/RichEdit3.htm"></a><br><u><font size=2><font color=#000033>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr></font></font></u><span style="COLOR: rgb(153,51,0)">15.richeidt用于聊天消息窗口<br><br></span><a href="http://www.vckbase.com/document/viewdoc/?id=1087"><font color=#000033 size=2><u>http://www.vckbase.com/document/viewdoc/?id=1087</u></font></a><br><a href="http://www.codeproject.com/richedit/chatrichedit.asp"><font color=#000033 size=2><u>http://www.codeproject.com/richedit/chatrichedit.asp</u></font></a><br><a href="http://www.codeguru.com/Cpp/controls/richedit/article.php/c2395/"><u><font color=#000033 size=2>http://www.codeguru.com/Cpp/controls/richedit/article.php/c2395/</font></u></a><br><br><u><font size=2><font color=#000033>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr></font></font></u><span style="COLOR: rgb(153,51,0)">16.解决richedit的EN_SETFOCUS和EN_KILLFOCUS无响应的问题<br><br></span><a href="http://support.microsoft.com/kb/181664/en-us"><u><font color=#000033 size=2>http://support.microsoft.com/kb/181664/en-us</font></u></a><br><br><u><font size=2><font color=#000033>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr></font></font></u><span style="COLOR: rgb(153,51,0)">17.richedit拼写检查<br><br></span><a href="http://www.codeproject.com/com/AutoSpellCheck.asp"><u><font color=#000033 size=2>http://www.codeproject.com/com/AutoSpellCheck.asp</font></u></a><br><br><u><font size=2><font color=#000033>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr></font></font></u><span style="COLOR: rgb(153,51,0)">18.改变edit背景色<br><br></span>Q117778：How to change the background color of an MFC edit control<br><a href="http://support.microsoft.com/kb/117778/en-us"><u><font color=#000033 size=2>http://support.microsoft.com/kb/117778/en-us</font></u></a><br><br><u><font size=2><font color=#000033>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr></font></font></u><span style="COLOR: rgb(153,51,0)">19.当edit控件的父窗口属性是带标题栏WS_CAPTION和子窗口WS_CHILD时，不能设置焦点SetFocus<br><br></span>Q230587：PRB: Can't Set Focus to an Edit Control When its Parent Is an Inactive Captioned Child Window<br style="COLOR: rgb(153,51,0)"><br><span style="COLOR: rgb(153,51,0)"><a href="http://support.microsoft.com/kb/230587/en-us"><u><font size=2><span style="COLOR: rgb(153,51,0)">http://support.microsoft.com/kb/230587/en-us</span><br style="COLOR: rgb(153,51,0)"><br></font></u></a></span><br><u><font size=2>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr></font></u><span style="COLOR: rgb(153,51,0)">20. 在Edit中回车时，会退出对话框&nbsp;</span><br><br>选中Edit的风格Want Return。<br><br>MSDN的解释如下：<br><font size=+0><font face=verdana,arial,helvetica size=2><strong>ES_WANTRETURN</strong>&nbsp;&nbsp;&nbsp;Specifies that a carriage return be inserted when the user presses the ENTER key while entering text into a multiple-line edit control in a dialog box. Without this style, pressing the ENTER key has the same effect as pressing the dialog box's default pushbutton. This style has no effect on a single-line edit control.<br><br></font></font>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">21. 动态创建的edit没有边框的问题</span><br><br>&nbsp;&nbsp;&nbsp; m_edit.Create(....);<br>&nbsp;&nbsp;&nbsp; m_edit.ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_DRAWFRAME);<br>
<hr style="WIDTH: 100%; HEIGHT: 2px">
</hr><span style="COLOR: rgb(153,51,0)">22. 一个能显示RTF，ole（包括gif， wmv，excel ，ppt）的例子</span><br><br><a href="http://www.codeproject.com/richedit/COleRichEditCtrl.asp"><u><font color=#000033 size=2>http://www.codeproject.com/richedit/COleRichEditCtrl.asp</font></u></a><br></div>
<img src ="http://www.cppblog.com/PeakGao/aggbug/23208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2007-04-29 20:59 <a href="http://www.cppblog.com/PeakGao/archive/2007/04/29/23208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对list的查找的另一种作法</title><link>http://www.cppblog.com/PeakGao/archive/2006/06/10/8383.html</link><dc:creator>PeakGao</dc:creator><author>PeakGao</author><pubDate>Sat, 10 Jun 2006 08:46:00 GMT</pubDate><guid>http://www.cppblog.com/PeakGao/archive/2006/06/10/8383.html</guid><wfw:comment>http://www.cppblog.com/PeakGao/comments/8383.html</wfw:comment><comments>http://www.cppblog.com/PeakGao/archive/2006/06/10/8383.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/PeakGao/comments/commentRss/8383.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/PeakGao/services/trackbacks/8383.html</trackback:ping><description><![CDATA[大家用了stl的list后都知道，他的节点在内存中的位置是固定的，但是当删除或查找某个指定节点时需要遍历，这样当list很大时，这个遍历过程未免有些性能诟病。当然大家会很容易想到hash_map，但是hash_map在节点数超过一定数量后也会进行“扩容”操作，这样存在大量的对象的搬迁。我们看看list的特点：结构简单，节点的内存地址固定，添加删除操作快捷；再看看hash_map的特点：查找速度快，节点的内存地址可能不固定（依赖是否扩容），如果我们将两者结合可以解决某些特殊应用场合（指那些可能需要记录节点内存位置的场合）。用一个list和一个hash_map来管理一个数据列表，list记录具体的节点的数据，hash_map用于记录list的迭代器地址，这样需要查找一个键值为key的对象在list中的节点时，可以通过hash_map来进行定位，具体性能如何没有测试过，应该不会比list的直接遍历查找慢，大家可以自己试试。<img src ="http://www.cppblog.com/PeakGao/aggbug/8383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/PeakGao/" target="_blank">PeakGao</a> 2006-06-10 16:46 <a href="http://www.cppblog.com/PeakGao/archive/2006/06/10/8383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>