﻿<?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++博客-traces of the past</title><link>http://www.cppblog.com/marv/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:37:50 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:37:50 GMT</pubDate><ttl>60</ttl><item><title>windows环境下apache执行C++ FCGI</title><link>http://www.cppblog.com/marv/archive/2012/11/12/195082.html</link><dc:creator>Marv</dc:creator><author>Marv</author><pubDate>Mon, 12 Nov 2012 09:08:00 GMT</pubDate><guid>http://www.cppblog.com/marv/archive/2012/11/12/195082.html</guid><wfw:comment>http://www.cppblog.com/marv/comments/195082.html</wfw:comment><comments>http://www.cppblog.com/marv/archive/2012/11/12/195082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/marv/comments/commentRss/195082.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/marv/services/trackbacks/195082.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; &nbsp;&nbsp; 开始搞服务器这块就愈发觉得linux方便，老大要求用fastcgi写服务，在linux下很快就能搭好环境调通，而到了windows下就很麻烦，nginx也好apache也好典型的应用场景并不是在windows上，倒腾了一上午nginx也没把流程走通，spawn-cgi程序运行不了，FCGI库里自带的cgi-fcgi则是直接运行错误。好在转投apache之后基本可以跑起来，剩下的服务实现部分实际也以前做的差不了多少。在网上找解决方案的过程中，一方面觉得似乎php的实现更为常见，一方面国外的资料比国内的无意义转载靠谱。参考<a title="配置方案" href="http://www.lazarus.freepascal.org/index.php?topic=13312.0">配置方案</a>把环境搭好了，只是文章后面提到了采用FCGI模块可以再外部执行从而调试程序，而实际运行中fcgi程序似乎是不能单独运行。而在基本配置方案中，下载好模块，添加剂module目录，按格式修改apache配置文件就好了。<br />&nbsp;&nbsp;&nbsp;&nbsp; <div>Download from <a href="http://httpd.apache.org/download.cgi#mod_fcgid" target="_blank">http://httpd.apache.org/download.cgi#mod_fcgid</a> the latest <br />Windows zip file and unpack as it instructs you to, over the installed Apache <br />directory. This puts the mod_fcgid.* files under the current /modules <br />directory of Apache.<br /><br />1.1.2 Now, mod_fcgid is ready to be used as soon as we load it with Apache.<br /><br />1.1.3 If you have not done so yet, compile your FCGI application.<br /><br />1.1.4 Then, edit the Apache /conf/httpd.conf file and add to the end:<br />############<br />LoadModule fcgid_module "modules/mod_fcgid.so"<br />&lt;IfModule mod_fcgid.c&gt;<br />&nbsp; &lt;Directory "&lt;Path_To_Your_FCGI_application&gt;"&gt;<br />&nbsp; &nbsp; SetHandler fcgid-script<br />#&nbsp; &nbsp; Options +ExecCGI&nbsp; &lt;- not needed if ScriptAlias is used below<br />&nbsp; &nbsp; Order allow,deny<br />&nbsp; &nbsp; Allow from all<br />&nbsp; &lt;/Directory&gt;<br />#optionally, to shorten the URL and to not display the executable file name <br />#(if ScriptAlias is used, no +ExecCGI is needed above)<br />&nbsp; ScriptAlias /myfcgid "&lt;Path_To_Your_FCGI_application&gt;/&lt;Your_FCGI_application&gt;"<br />&lt;/IfModule&gt;<br />############<br />Example:<br />LoadModule fcgid_module "modules/mod_fcgid.so"<br />&lt;IfModule mod_fcgid.c&gt;<br />&nbsp; &lt;Directory "C:/My Programs/LazarusFCGITest"&gt;<br />&nbsp; &nbsp; SetHandler fcgid-script<br />&nbsp; &nbsp; Order allow,deny<br />&nbsp; &nbsp; Allow from all<br />&nbsp; &lt;/Directory&gt;<br />&nbsp; ScriptAlias /myfcgid "C:/My Programs/LazarusFCGITest/helloworld.exe"<br />&lt;/IfModule&gt;<br /><br />Note, there are many ways to configure the FCGI applications, this is just but <br />one example. You can check the Apache and mod_fcgid documentation for <br />alternatives.<br /><br />1.1.5 Start/Restart your Apache server so it will load your FCGI application. <br />If everything went according to plan, your FCGI application should be listed <br />in the Windows task manager as running.<br /><br />1.1.6 Open your web browser and try to call your new FCGI application.<br />Example:<br /><a href="http://127.0.0.1:8080/myfcgid/func1call" target="_blank">http://127.0.0.1:8080/myfcgid/func1call</a><br />or<br /><a href="http://127.0.0.1/myfcgid/func1call" target="_blank">http://127.0.0.1/myfcgid/func1call</a><br />depending on your Apache installation and configuration. "myfcgid" is the <br />ScriptAlias name specified for the FCGI application, func1call is the action <br />name we want to call within our default web module. If you have multiple web <br />modules, you can enter the desired web module name before the action name, for <br />example: <br /><a href="http://127.0.0.1:8080/myfcgid/webmodule1/func1call" target="_blank">http://127.0.0.1:8080/myfcgid/webmodule1/func1call</a><br />or<br /><a href="http://127.0.0.1/myfcgid/webmodule1/func1call" target="_blank">http://127.0.0.1/myfcgid/webmodule1/func1call</a><br /><br />If there is any problem, you can try and check the Apache error.log for clues.</div><img src ="http://www.cppblog.com/marv/aggbug/195082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/marv/" target="_blank">Marv</a> 2012-11-12 17:08 <a href="http://www.cppblog.com/marv/archive/2012/11/12/195082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>effective C++读书笔记</title><link>http://www.cppblog.com/marv/archive/2012/07/30/185651.html</link><dc:creator>Marv</dc:creator><author>Marv</author><pubDate>Mon, 30 Jul 2012 09:48:00 GMT</pubDate><guid>http://www.cppblog.com/marv/archive/2012/07/30/185651.html</guid><wfw:comment>http://www.cppblog.com/marv/comments/185651.html</wfw:comment><comments>http://www.cppblog.com/marv/archive/2012/07/30/185651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/marv/comments/commentRss/185651.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/marv/services/trackbacks/185651.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: effectivec++读书笔记&nbsp;&nbsp;<a href='http://www.cppblog.com/marv/archive/2012/07/30/185651.html'>阅读全文</a><img src ="http://www.cppblog.com/marv/aggbug/185651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/marv/" target="_blank">Marv</a> 2012-07-30 17:48 <a href="http://www.cppblog.com/marv/archive/2012/07/30/185651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TIME_WAIT，CLOSE_WAIT与线程数限制</title><link>http://www.cppblog.com/marv/archive/2012/06/27/180495.html</link><dc:creator>Marv</dc:creator><author>Marv</author><pubDate>Wed, 27 Jun 2012 08:50:00 GMT</pubDate><guid>http://www.cppblog.com/marv/archive/2012/06/27/180495.html</guid><wfw:comment>http://www.cppblog.com/marv/comments/180495.html</wfw:comment><comments>http://www.cppblog.com/marv/archive/2012/06/27/180495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/marv/comments/commentRss/180495.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/marv/services/trackbacks/180495.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 手头的活干得差不多了，代码没多大变动，即便现在使用的单用户单线程模型比较原始也没什么扩展性，单个节点应付不了高并发的访问。在用loadrunner进行压力测试的过程中也发现了些问题，有的是程序问题有的是centos参数设置。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先是在服务器端发现了大量套接字处于CLOSE_WAIT状态，套接字使用数不断上升，直到用完了所有的文件描述符不再响应新的请求。根据TCP状态图，知道这种状态是套接字被动关闭，即客户端关闭套接字，服务器再向套接字写入数据则返回broken pipe错误。也就是说，服务器没有正常关闭该套接字，而在回看代码的过程中 又确实调用了closesocket，也尝试过shutdown或者所谓非优雅的关闭套接字设置lingertime选项都没能解决问题。磨了几天，想起来服务线程传入参数不对，传的一个局部变量，过了生存周期，而关闭套接字的时候也自然是返回一个错误。后来改为new一个对象出来作为传入参数在新线程里面delete。<br />&nbsp;&nbsp;&nbsp;&nbsp; 改过来之后再测，发现周期性的吞吐量下降，用netstat一查发现大量套接字处于TIME_WAIT状态，根据TCP状态图，这个属于正常现象，即等待2MSL时间确保ACK信息以及之前发送的重复包全部消失。如果是在linux系统下可以修改相关参数快速回收TIME_WAIT状态的套接字，<span style="white-space: pre;">修改</span><span style="white-space: pre;">/etc/sysctl.conf文件，<div><span style="white-space: pre;">/sbin/sysctl -p是设置生效</span></div></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #000000; ">#对于一个新建连接，内核要发送多少个&nbsp;SYN&nbsp;连接请求才决定放弃,不应该大于255，默认值是5，对应于180秒左右时间&nbsp;<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">net.ipv4.tcp_syn_retries</span><span style="color: #000000; ">=</span><span style="color: #000000; ">2</span><span style="color: #000000;"><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">#net.ipv4.tcp_synack_retries</span><span style="color: #000000; ">=</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">#表示当keepalive起用的时候，TCP发送keepalive消息的频度。缺省是2小时，改为300秒<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">net.ipv4.tcp_keepalive_time</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1200</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">net.ipv4.tcp_orphan_retries</span><span style="color: #000000; ">=</span><span style="color: #000000; ">3</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">#表示如果套接字由本端要求关闭，这个参数决定了它保持在FIN</span><span style="color: #000000; ">-</span><span style="color: #000000; ">WAIT</span><span style="color: #000000; ">-</span><span style="color: #000000; ">2状态的时间<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">net.ipv4.tcp_fin_timeout</span><span style="color: #000000; ">=</span><span style="color: #000000; ">30</span><span style="color: #000000; ">&nbsp;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">#表示SYN队列的长度，默认为1024，加大队列长度为8192，可以容纳更多等待连接的网络连接数。<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">net.ipv4.tcp_max_syn_backlog&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">4096</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">#表示开启SYN&nbsp;Cookies。当出现SYN等待队列溢出时，启用cookies来处理，可防范少量SYN攻击，默认为0，表示关闭<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">net.ipv4.tcp_syncookies&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">#表示开启重用。允许将TIME</span><span style="color: #000000; ">-</span><span style="color: #000000; ">WAIT&nbsp;sockets重新用于新的TCP连接，默认为0，表示关闭<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">net.ipv4.tcp_tw_reuse&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">#表示开启TCP连接中TIME</span><span style="color: #000000; ">-</span><span style="color: #000000; ">WAIT&nbsp;sockets的快速回收，默认为0，表示关闭<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">net.ipv4.tcp_tw_recycle&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">##减少超时前的探测次数<br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">net.ipv4.tcp_keepalive_probes</span><span style="color: #000000; ">=</span><span style="color: #000000; ">5</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">##优化网络设备接收队列<br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">net.core.netdev_max_backlog</span><span style="color: #000000; ">=</span><span style="color: #000000; ">3000</span></div>&nbsp;&nbsp;&nbsp;&nbsp; 改好之后，又发现集群里的存储节点在并发量上去的时候容易挂掉，查看日志上面写的pthread failed,resources temporary unavailable，服务器这边也出现这种情况，在网上查了下，linux默认对每个进程的线程数有限制，另一方面默认每个线程8M的栈空间，用户空间的内存有限制，再就是线程资源默认是在主线程调用join 的时候回收。对照代码，线程启动的时候设置了栈为1M，且为DETACHED状态，尝试在ulimit里面修改MAX USER PROCESSER选项，发现没什么效果，最后是修改/etc/security/limits.conf文件，加上2行参数设置可以启动的线程数。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;soft&nbsp;nproc&nbsp;</span><span style="color: #000000; ">20000</span><span style="color: #000000; ">&nbsp;&nbsp;<br /></span><span style="color: #008080; ">2</span>&nbsp;<span style="color: #000000; "></span><span style="color: #000000; ">*</span><span style="color: #000000; ">&nbsp;hard&nbsp;nproc&nbsp;</span><span style="color: #000000; ">20000</span></div>&nbsp;&nbsp;<img src ="http://www.cppblog.com/marv/aggbug/180495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/marv/" target="_blank">Marv</a> 2012-06-27 16:50 <a href="http://www.cppblog.com/marv/archive/2012/06/27/180495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>命令模式笔记</title><link>http://www.cppblog.com/marv/archive/2012/05/05/173716.html</link><dc:creator>Marv</dc:creator><author>Marv</author><pubDate>Sat, 05 May 2012 02:41:00 GMT</pubDate><guid>http://www.cppblog.com/marv/archive/2012/05/05/173716.html</guid><wfw:comment>http://www.cppblog.com/marv/comments/173716.html</wfw:comment><comments>http://www.cppblog.com/marv/archive/2012/05/05/173716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/marv/comments/commentRss/173716.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/marv/services/trackbacks/173716.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/marv/archive/2012/05/05/173716.html'>阅读全文</a><img src ="http://www.cppblog.com/marv/aggbug/173716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/marv/" target="_blank">Marv</a> 2012-05-05 10:41 <a href="http://www.cppblog.com/marv/archive/2012/05/05/173716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>责任链模式</title><link>http://www.cppblog.com/marv/archive/2012/05/03/173605.html</link><dc:creator>Marv</dc:creator><author>Marv</author><pubDate>Thu, 03 May 2012 13:22:00 GMT</pubDate><guid>http://www.cppblog.com/marv/archive/2012/05/03/173605.html</guid><wfw:comment>http://www.cppblog.com/marv/comments/173605.html</wfw:comment><comments>http://www.cppblog.com/marv/archive/2012/05/03/173605.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/marv/comments/commentRss/173605.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/marv/services/trackbacks/173605.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/marv/archive/2012/05/03/173605.html'>阅读全文</a><img src ="http://www.cppblog.com/marv/aggbug/173605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/marv/" target="_blank">Marv</a> 2012-05-03 21:22 <a href="http://www.cppblog.com/marv/archive/2012/05/03/173605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>proxy模式学习笔记</title><link>http://www.cppblog.com/marv/archive/2012/05/02/173525.html</link><dc:creator>Marv</dc:creator><author>Marv</author><pubDate>Wed, 02 May 2012 13:21:00 GMT</pubDate><guid>http://www.cppblog.com/marv/archive/2012/05/02/173525.html</guid><wfw:comment>http://www.cppblog.com/marv/comments/173525.html</wfw:comment><comments>http://www.cppblog.com/marv/archive/2012/05/02/173525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/marv/comments/commentRss/173525.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/marv/services/trackbacks/173525.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/marv/archive/2012/05/02/173525.html'>阅读全文</a><img src ="http://www.cppblog.com/marv/aggbug/173525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/marv/" target="_blank">Marv</a> 2012-05-02 21:21 <a href="http://www.cppblog.com/marv/archive/2012/05/02/173525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>flyweight模式学习笔记</title><link>http://www.cppblog.com/marv/archive/2012/05/02/173516.html</link><dc:creator>Marv</dc:creator><author>Marv</author><pubDate>Wed, 02 May 2012 12:26:00 GMT</pubDate><guid>http://www.cppblog.com/marv/archive/2012/05/02/173516.html</guid><wfw:comment>http://www.cppblog.com/marv/comments/173516.html</wfw:comment><comments>http://www.cppblog.com/marv/archive/2012/05/02/173516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/marv/comments/commentRss/173516.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/marv/services/trackbacks/173516.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/marv/archive/2012/05/02/173516.html'>阅读全文</a><img src ="http://www.cppblog.com/marv/aggbug/173516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/marv/" target="_blank">Marv</a> 2012-05-02 20:26 <a href="http://www.cppblog.com/marv/archive/2012/05/02/173516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>facade模式学习笔记</title><link>http://www.cppblog.com/marv/archive/2012/05/02/173478.html</link><dc:creator>Marv</dc:creator><author>Marv</author><pubDate>Wed, 02 May 2012 08:13:00 GMT</pubDate><guid>http://www.cppblog.com/marv/archive/2012/05/02/173478.html</guid><wfw:comment>http://www.cppblog.com/marv/comments/173478.html</wfw:comment><comments>http://www.cppblog.com/marv/archive/2012/05/02/173478.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/marv/comments/commentRss/173478.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/marv/services/trackbacks/173478.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/marv/archive/2012/05/02/173478.html'>阅读全文</a><img src ="http://www.cppblog.com/marv/aggbug/173478.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/marv/" target="_blank">Marv</a> 2012-05-02 16:13 <a href="http://www.cppblog.com/marv/archive/2012/05/02/173478.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>decorator模式学习笔记</title><link>http://www.cppblog.com/marv/archive/2012/05/02/173441.html</link><dc:creator>Marv</dc:creator><author>Marv</author><pubDate>Wed, 02 May 2012 03:08:00 GMT</pubDate><guid>http://www.cppblog.com/marv/archive/2012/05/02/173441.html</guid><wfw:comment>http://www.cppblog.com/marv/comments/173441.html</wfw:comment><comments>http://www.cppblog.com/marv/archive/2012/05/02/173441.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/marv/comments/commentRss/173441.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/marv/services/trackbacks/173441.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/marv/archive/2012/05/02/173441.html'>阅读全文</a><img src ="http://www.cppblog.com/marv/aggbug/173441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/marv/" target="_blank">Marv</a> 2012-05-02 11:08 <a href="http://www.cppblog.com/marv/archive/2012/05/02/173441.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>composite模式学习笔记</title><link>http://www.cppblog.com/marv/archive/2012/05/02/173439.html</link><dc:creator>Marv</dc:creator><author>Marv</author><pubDate>Wed, 02 May 2012 02:39:00 GMT</pubDate><guid>http://www.cppblog.com/marv/archive/2012/05/02/173439.html</guid><wfw:comment>http://www.cppblog.com/marv/comments/173439.html</wfw:comment><comments>http://www.cppblog.com/marv/archive/2012/05/02/173439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/marv/comments/commentRss/173439.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/marv/services/trackbacks/173439.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/marv/archive/2012/05/02/173439.html'>阅读全文</a><img src ="http://www.cppblog.com/marv/aggbug/173439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/marv/" target="_blank">Marv</a> 2012-05-02 10:39 <a href="http://www.cppblog.com/marv/archive/2012/05/02/173439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>