﻿<?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++博客-xgzpan-随笔分类-冰风手记</title><link>http://www.cppblog.com/xgzpan/category/2173.html</link><description>一步一个脚印</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 16:40:23 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 16:40:23 GMT</pubDate><ttl>60</ttl><item><title>vc6.0的内在泄露提示搞死我了</title><link>http://www.cppblog.com/xgzpan/archive/2008/05/10/49375.html</link><dc:creator>冰风谷</dc:creator><author>冰风谷</author><pubDate>Fri, 09 May 2008 16:24:00 GMT</pubDate><guid>http://www.cppblog.com/xgzpan/archive/2008/05/10/49375.html</guid><wfw:comment>http://www.cppblog.com/xgzpan/comments/49375.html</wfw:comment><comments>http://www.cppblog.com/xgzpan/archive/2008/05/10/49375.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xgzpan/comments/commentRss/49375.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xgzpan/services/trackbacks/49375.html</trackback:ping><description><![CDATA[<span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 自己接触的项目基本都是用vc2003写的.这几天因为贪图vc6.0写的dll小(不必静态连接嘛).所以用上了这个"老家伙".而以前的程序都不是UNICODE字符集的,考虑到国际化,所以这个DLL就用UNICODE字符集了.</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; dll的接口定义好后,又写了几个类.然后用MFC对话框程序来测试这个dll.可要命的是,vc6老是提示有内在泄露.如下:</span><br style="color: #a00000;"><span style="color: #a00000;">Detected memory leaks!</span><br style="color: #a00000;"><span style="color: #a00000;">Dumping objects -&gt;</span><br style="color: #a00000;"><span style="color: #a00000;">{51} normal block at 0x003B2E80, 33 bytes long.</span><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;Data: &lt; C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD </span><br style="color: #a00000;"><span style="color: #a00000;">{50} normal block at 0x003B2E18, 40 bytes long.</span><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;Data: &lt; |L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt; 14 7C 4C 10 16 00 00 00 00 00 00 00 00 00 00 00 </span><br style="color: #a00000;"><span style="color: #a00000;">Object dump complete.</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 我检查了所有该释放内存的地方都释放了.还是提示内在泄露...我动用了内存泄露检查工具(AQTime5),却没找到有内存泄露的地方...是怎么回事呢?</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 最后,我只是在测试工程里加上dll导出来的api,而没有调用.还是提示有内在泄露...怎么回事?我确认,如果dll导出的api没有被调用,dll里就绝对不会有对象被实例化!</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 可是,这样怎么还是说有内在泄露?我要抓狂了:(....</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 没法,还是要找到问题出在哪里啊.我就把dll的类一个一个注释掉,把dll中的文件从工程中一个一个移除掉...把一个类里的一个变量或一个成员函数注释掉...终于发现是在一个线程类里有这样一个成员变量:wstring m_strThreadName,只要注视掉它,就不会有内在泄露的提示,只要加上就有.</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 真晕,这个线程类都还没有被实例化呢.为了验证是vc6生成长歪了,我用它写了一个很简单的dll,只导出一个add的api,这个api做了一个1+1的运算,然后返回. 测试后,没问题.我又增加了一个类,并加上了一个成员变量: wstring m_name,不实例化它. 再次测试果然提示有内存泄露,和前一个dll的提示一模一样!! 我晕菜后醒来,真想拿头撞墙,最后考虑再三,只是一口气做了N个俯卧撑(N&lt;=5,发现右手经常握鼠标,经年累月后,在手腕和手掌关节处的骨头长长了,成不了90度了.做俯卧撑时疼痛难忍,看样子,要经常锻炼身体才对)</span><br style="color: #a00000;"><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 用vc2003或以上的版本测试,没有这个内存泄露的提示.</span><br style="color: #a00000;"><span style="color: #a00000;">&nbsp;&nbsp;&nbsp; 哎,应该彻底的把vc6仍到厕所里了(对模板支持太差,可也怪不了人家,它出生太早).说不定又会莫名其妙的闹鬼....</span><br style="color: #a00000;"><img src ="http://www.cppblog.com/xgzpan/aggbug/49375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xgzpan/" target="_blank">冰风谷</a> 2008-05-10 00:24 <a href="http://www.cppblog.com/xgzpan/archive/2008/05/10/49375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC程序菜单项是灰色的原因</title><link>http://www.cppblog.com/xgzpan/archive/2008/01/12/41051.html</link><dc:creator>冰风谷</dc:creator><author>冰风谷</author><pubDate>Sat, 12 Jan 2008 13:38:00 GMT</pubDate><guid>http://www.cppblog.com/xgzpan/archive/2008/01/12/41051.html</guid><wfw:comment>http://www.cppblog.com/xgzpan/comments/41051.html</wfw:comment><comments>http://www.cppblog.com/xgzpan/archive/2008/01/12/41051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xgzpan/comments/commentRss/41051.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xgzpan/services/trackbacks/41051.html</trackback:ping><description><![CDATA[<span style="color: #980000;">&nbsp;&nbsp;&nbsp; 做vc开发两年了，很少做界面开发，最多就是一个对话框，上面放几个按钮，再放上几个static text显示程序运行信息。目前做广播源和镜像服务器，按钮多了点，感觉很乱，就加上了菜单。可是发现有一个菜单项不管怎么弄都显示灰色，已经响应Update UI消息了...</span><br style="color: #980000;"><span style="color: #980000;">&nbsp;&nbsp;&nbsp; </span><br style="color: #980000;"><span style="color: #980000;">&nbsp;&nbsp;&nbsp; 后来才发现是菜单项ID重复了，NND....</span><br><br> <img src ="http://www.cppblog.com/xgzpan/aggbug/41051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xgzpan/" target="_blank">冰风谷</a> 2008-01-12 21:38 <a href="http://www.cppblog.com/xgzpan/archive/2008/01/12/41051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>天南地北一日游:临时站--spin lock</title><link>http://www.cppblog.com/xgzpan/archive/2008/01/05/40455.html</link><dc:creator>冰风谷</dc:creator><author>冰风谷</author><pubDate>Sat, 05 Jan 2008 06:54:00 GMT</pubDate><guid>http://www.cppblog.com/xgzpan/archive/2008/01/05/40455.html</guid><wfw:comment>http://www.cppblog.com/xgzpan/comments/40455.html</wfw:comment><comments>http://www.cppblog.com/xgzpan/archive/2008/01/05/40455.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/xgzpan/comments/commentRss/40455.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xgzpan/services/trackbacks/40455.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 今天周六，孤家寡人，无所事事，正好拿出刚从china-pub上购买的书"深入解析ATL"第二版来看看...<br><br>&nbsp;&nbsp;&nbsp; 以前一直对COM比较感兴趣，也囫囵吞枣的看了些关于COM的书籍，限于功力有限，也一直没从事COM方面的工作。时到今日，还是个&#8220;糊涂神&#8221;...由于现在的工作不再像以前那样处处受限于人，自由度比较大，很多时候自己可以拿主意了。所以在做模块化时，何不用COM来做做？<br><br>&nbsp;&nbsp;&nbsp; 刚看了一点，看到线程套间的时候，还是如以前那么模糊，于是想google下，是否能查到哪位神人写了一篇神帖，让我一下豁然开朗。果然从www.vckbase.com上搜到了一篇"<strong>理解 COM 套间</strong>"的帖子，作者<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#106;&#117;&#110;&#103;&#117;&#111;&#95;&#121;&#111;&#117;&#64;&#121;&#97;&#104;&#111;&#111;&#46;&#99;&#111;&#109;">junguo</a>。看了下简述，为作者曾经失去的一段感情感到惋惜，COM居然也能参入其中，真是不可小看，呵呵。<br><br>&nbsp;&nbsp;&nbsp; 很赞同作者的话，你想学好一个东西，就必须先弄明白这个东西产生的背景和原因。其间，作者说到多线程，说到了汇编...于是我去看了下各寄存器的功能...说到了线程同步，发现作者在调用InitializeCriticalSection初始化CRITICAL_SECTION后没有释放，但我一时记不起释放的函数了，于是在msdn里搜下InitializeCriticalSection 这个API，就找到了DeleteCriticalSection，就它释放临界区了。一般创建资源和释放资源的API，在msdn里总是互相引用，成双成对的嘛。但我突然发现了初始化临界区的另一API:<span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"><span style="color: #18ff26;"><span style="color: #00a447;">InitializeCriticalSectionAndSpinCount</span>，</span>它是干嘛的？比</span>InitializeCriticalSection来多了什么功能？在什么情况下不使用InitializeCriticalSection，而使用<span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"><span style="color: #00a447;">InitializeCriticalSectionAndSpinCount</span>？<br><br>&nbsp;&nbsp;&nbsp; 看MSDN，虽然能看懂，但还是嫌慢了点，就又google了下，发现了这篇文章:http://yjl.spaces.live.com/blog/cns!8129C4219A8E995B!466.entry.突然间想起了上周末，我在看的<span style="color: #00a447;">Lock-Free, Wait-Free</span>...想起有一个地方说实现spin lock的意义。当时也没在意，呵呵，现在一想起来，原来ms为我们实现了不少东东:<span style="color: #00a447;">CAS，可用</span></span><span style="color: #00a447;">InterlockedCompareExchangePointer</span>来实现，就是CAS2没找到对应的实现，应该是一个64位的API,没仔细的去找。而现在又突然发现<span style="color: #00a447;">spin lock可以用</span><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"><span style="color: #00a447;">InitializeCriticalSectionAndSpinCount来代替，哈哈....</span><br><br>&nbsp;&nbsp;&nbsp; 哎哎，游得太远点了，我回去了。不过先回&#8220;</span><strong>理解 COM 套间</strong><span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry">&#8221;这篇文章再说，还没看完呢。看完了再回书上...看腻了，就开始做做UDP直播的镜像吧，这回可是有一个月工资的奖金的...<br></span> <img src ="http://www.cppblog.com/xgzpan/aggbug/40455.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xgzpan/" target="_blank">冰风谷</a> 2008-01-05 14:54 <a href="http://www.cppblog.com/xgzpan/archive/2008/01/05/40455.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开始认真学习word的使用</title><link>http://www.cppblog.com/xgzpan/archive/2008/01/04/40369.html</link><dc:creator>冰风谷</dc:creator><author>冰风谷</author><pubDate>Thu, 03 Jan 2008 16:03:00 GMT</pubDate><guid>http://www.cppblog.com/xgzpan/archive/2008/01/04/40369.html</guid><wfw:comment>http://www.cppblog.com/xgzpan/comments/40369.html</wfw:comment><comments>http://www.cppblog.com/xgzpan/archive/2008/01/04/40369.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xgzpan/comments/commentRss/40369.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xgzpan/services/trackbacks/40369.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 以前一直把word当字处理软件来使用，所有的格式都是自己空格，回车，手动输入1,2,3...来分类...文档还没写几页，就觉得整个版面丑陋不堪...看着看着就失去了继续写下去的兴趣....<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 实在受不了不会排版的郁闷了，就到网上下了&#8220;Word排版艺术[候捷]2004&#8221;来学习....<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 每天抽时间来学学，也不亦乐呼<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; 期待学习漂亮的排版在我的敲打下现身....<br><br><img src ="http://www.cppblog.com/xgzpan/aggbug/40369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xgzpan/" target="_blank">冰风谷</a> 2008-01-04 00:03 <a href="http://www.cppblog.com/xgzpan/archive/2008/01/04/40369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>哎，一天又这样过去了</title><link>http://www.cppblog.com/xgzpan/archive/2006/08/26/11735.html</link><dc:creator>冰风谷</dc:creator><author>冰风谷</author><pubDate>Sat, 26 Aug 2006 11:16:00 GMT</pubDate><guid>http://www.cppblog.com/xgzpan/archive/2006/08/26/11735.html</guid><wfw:comment>http://www.cppblog.com/xgzpan/comments/11735.html</wfw:comment><comments>http://www.cppblog.com/xgzpan/archive/2006/08/26/11735.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xgzpan/comments/commentRss/11735.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xgzpan/services/trackbacks/11735.html</trackback:ping><description><![CDATA[　　真是郁闷极了，刚起来一看，又是晚上7点了！周六又这样过去了，而我什么都没有学到。<br />　　早上起来已是近10点。进入现在的公司后，工作上特别充实，当然也特别容易疲倦。住的地方离公司又远，每天下班回家花一个多小时，到家后一身的汗。洗个澡，换套衣服，然后打开电脑，放首歌，然后煮面吃...端着面看会新闻或自己喜欢的电视或打开ppstream看看有没有好看的电视电影或上ppstream论坛，或上csdn社区或上自己的gmail看下订阅的文章....<br /><br />　　一会功夫就到10点了。一天的困意也随之而来。天啊，我还有很多的东西要学啊。网络编程，流媒体，p2p....基础的数据结构，算法等...看来，不是科班出身的进入这行，要做好这行，占有一定的地位，还是很辛苦的，而我已经辛苦两年了！两年了，就是从只会聊天，连if...else都不会写，爬到今天...从刚入这行时的800到现在的8倍...<br /><br />　　ppstream，我一直看好的产品，也有幸能参加到它的开发中来...但我的基础真的太薄弱，要学的太多...可是现在却总没时间学习，连周末也被自己这样浪费着，不可原谅！！<br /><br />　　在我们小组，就我的资历最低了吧。他们都在c++中开发了5,6年了，就我两年，而且头一年还是做vb，真正接触vc(c++)还差几天才到一年...呵呵。任务重啊。。。<br /><br />　　我应该好好的反省一下，好好的重新制定一份时间的管理方案...<br /><br />        今天我集中鄙视一下自己这种大度挥霍时间的人一次...<img src ="http://www.cppblog.com/xgzpan/aggbug/11735.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xgzpan/" target="_blank">冰风谷</a> 2006-08-26 19:16 <a href="http://www.cppblog.com/xgzpan/archive/2006/08/26/11735.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>长见识了，呵呵</title><link>http://www.cppblog.com/xgzpan/archive/2006/07/12/9779.html</link><dc:creator>冰风谷</dc:creator><author>冰风谷</author><pubDate>Wed, 12 Jul 2006 15:33:00 GMT</pubDate><guid>http://www.cppblog.com/xgzpan/archive/2006/07/12/9779.html</guid><wfw:comment>http://www.cppblog.com/xgzpan/comments/9779.html</wfw:comment><comments>http://www.cppblog.com/xgzpan/archive/2006/07/12/9779.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/xgzpan/comments/commentRss/9779.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xgzpan/services/trackbacks/9779.html</trackback:ping><description><![CDATA[　　今天在看广播源服务器的代码，那个下载类，居然有130多个成员函数，200多个数据成员。是我见过的之最啊。不过，完成的功能还是真的很复杂...<br /><br />　　所以俺正在想着，怎么把它的功能拆成几块，比如节点管理功能，UDP数据包处理功能，广播源的管理和操作功能...<br /><br /><br />　　纪念一下<img height="19" src="http://www.cppblog.com/Emoticons/teeth_smile.gif" width="19" border="0" /><img src ="http://www.cppblog.com/xgzpan/aggbug/9779.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xgzpan/" target="_blank">冰风谷</a> 2006-07-12 23:33 <a href="http://www.cppblog.com/xgzpan/archive/2006/07/12/9779.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>同行到底是同行</title><link>http://www.cppblog.com/xgzpan/archive/2006/07/10/9618.html</link><dc:creator>冰风谷</dc:creator><author>冰风谷</author><pubDate>Sun, 09 Jul 2006 16:41:00 GMT</pubDate><guid>http://www.cppblog.com/xgzpan/archive/2006/07/10/9618.html</guid><wfw:comment>http://www.cppblog.com/xgzpan/comments/9618.html</wfw:comment><comments>http://www.cppblog.com/xgzpan/archive/2006/07/10/9618.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/xgzpan/comments/commentRss/9618.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xgzpan/services/trackbacks/9618.html</trackback:ping><description><![CDATA[
		<p>　　前几天在csdn上看到一位朋友问p2p流媒体通信中是用tcp好还是udp好时，看到一位朋友说能用tcp尽量用tcp，只有在内网中因tcp无法穿透才使用udp。<br /><br />　　我回了一个，说：“我不大同意。因为在节点间为了得到一个分片，会发起N多的tcp连接，开销很大”。结果问问题的朋友没有叼我（其实是正常的）。想不到却被光芒国际的一位同行(当然也是做p2p流媒体的一家公司)发现，发消息给我，希望建立联系。我同意了，同行之间，交流绝没有坏处，只要不涉及到对方敏感的东西就OK。<br /><br />　　真的像练武之人一样，同行一看你伸手劈腿就知道你大概有几斤几两了。当然，我现在是现炒现买，什么都不会了。哈哈<br /><br />　　回到原来话题。因为是p2p，所以节点间交流数据是很频繁很频繁的，而广播源是以块为单位推向网络的...而块会分成许多的分片。节点获得分片的顺序是没有规律的，但有等级。当用tcp连接时，每一个节点都会发起很多的连接，而每次tcp连接的三次握手，完美关闭都是很大的开销...所以能用udp，尽量用udp。因为是视频流媒体，丢一两个分片是无伤大雅的。当然，我们的追求是一个分片都不落。<br /><br />　　实际上，真正的行家看我的这些话，又会认为我是门外汉。都没错，我刚入行，嘻嘻... </p>
<img src ="http://www.cppblog.com/xgzpan/aggbug/9618.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xgzpan/" target="_blank">冰风谷</a> 2006-07-10 00:41 <a href="http://www.cppblog.com/xgzpan/archive/2006/07/10/9618.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>