﻿<?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++博客-stevenyao</title><link>http://www.cppblog.com/stevenyao/</link><description /><language>zh-cn</language><lastBuildDate>Sun, 19 Apr 2026 15:47:09 GMT</lastBuildDate><pubDate>Sun, 19 Apr 2026 15:47:09 GMT</pubDate><ttl>60</ttl><item><title>终于找到了xp下切换输入法会卡问题的原因</title><link>http://www.cppblog.com/stevenyao/archive/2011/08/12/153208.html</link><dc:creator>姚冬</dc:creator><author>姚冬</author><pubDate>Fri, 12 Aug 2011 08:47:00 GMT</pubDate><guid>http://www.cppblog.com/stevenyao/archive/2011/08/12/153208.html</guid><wfw:comment>http://www.cppblog.com/stevenyao/comments/153208.html</wfw:comment><comments>http://www.cppblog.com/stevenyao/archive/2011/08/12/153208.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/stevenyao/comments/commentRss/153208.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stevenyao/services/trackbacks/153208.html</trackback:ping><description><![CDATA[估计很多软件都会遇到类似的问题，切换输入法的时候会卡一下，有时还会卡很久 1分钟左右，但是等一下还会恢复。<br /><br />原因是 windows xp在初始化输入法的时候，会给进程内所有的有窗口的线程广播一个消息，等待他们回应。<br />如果其中一个线程阻塞了，或者干脆就没有消息循环，那么界面就会卡住。<br />我遇到的错误是 ，有个线程做了同步的http请求，有时候这个请求响应特别慢，甚至要等到超时。<br /><br />解决方法:<br />1. 不要在工作线程里创建窗口<br />2. 不要在有窗口的线程里做阻塞操作，尤其是时间很长的<br />3. 如果要阻塞操作 并且必须有窗口用来收发消息，做通信，那么创建窗口的时候用 &nbsp;HWND_MESSAGE来做父窗口，这样的窗口是Message only的，不会被输入法广播到。<br /><br />我觉得这是微软 windows的bug，但是一直都没有改，直到 windows 7才改。所以这个问题只影响xp用户。<img src ="http://www.cppblog.com/stevenyao/aggbug/153208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stevenyao/" target="_blank">姚冬</a> 2011-08-12 16:47 <a href="http://www.cppblog.com/stevenyao/archive/2011/08/12/153208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正在筹备一个 基于 Qt的客户端项目，有兴趣的qt 爱好者可以联系我</title><link>http://www.cppblog.com/stevenyao/archive/2011/01/05/138008.html</link><dc:creator>姚冬</dc:creator><author>姚冬</author><pubDate>Wed, 05 Jan 2011 04:40:00 GMT</pubDate><guid>http://www.cppblog.com/stevenyao/archive/2011/01/05/138008.html</guid><wfw:comment>http://www.cppblog.com/stevenyao/comments/138008.html</wfw:comment><comments>http://www.cppblog.com/stevenyao/archive/2011/01/05/138008.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/stevenyao/comments/commentRss/138008.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stevenyao/services/trackbacks/138008.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这是一个 基于 qt framework的客户端项目，预计代码规模大约50万行的样子。<br>如果完成的话，大概也算是中国用qt写的比较大的程序了。&nbsp;&nbsp;<a href='http://www.cppblog.com/stevenyao/archive/2011/01/05/138008.html'>阅读全文</a><img src ="http://www.cppblog.com/stevenyao/aggbug/138008.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stevenyao/" target="_blank">姚冬</a> 2011-01-05 12:40 <a href="http://www.cppblog.com/stevenyao/archive/2011/01/05/138008.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Symbian Foundation死了，我只能说这是咎由自取</title><link>http://www.cppblog.com/stevenyao/archive/2010/11/28/134906.html</link><dc:creator>姚冬</dc:creator><author>姚冬</author><pubDate>Sun, 28 Nov 2010 10:49:00 GMT</pubDate><guid>http://www.cppblog.com/stevenyao/archive/2010/11/28/134906.html</guid><wfw:comment>http://www.cppblog.com/stevenyao/comments/134906.html</wfw:comment><comments>http://www.cppblog.com/stevenyao/archive/2010/11/28/134906.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/stevenyao/comments/commentRss/134906.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stevenyao/services/trackbacks/134906.html</trackback:ping><description><![CDATA[<h3 id="news_title" style="text-align: left;margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana; font-size: 12px; ">Symbian.org12月17日正式关闭</h3><a href="http://www.cnbeta.com/articles/128176.htm">http://www.cnbeta.com/articles/128176.htm</a><br><br>Symbian的开源就是一个奇怪的决定，当初Nokia纯粹是为了给Android添乱，但是没有仔细想过自己到底会不会运作开源项目。<br>事实证明，Nokia是没有开源基因的，虽然世界上最成功的开源项目之一linux也是芬兰人发起的，但是并不是所有芬兰人都懂得开源的精髓。<br><br>Nokia弄了一帮英国人来管理这个基金会，英国人是著名的拿高薪而不干活的主儿，真正维护代码的却是一帮nokia雇佣的外包公司，而且大多是印度阿三，这些人既没能力也没热情去改善代码。<br><br>nokia开放了源代码，却没有改变开发流程，反而开发流程变得更加保守，别说志愿者想贡献代码，就是nokia内部人要改点什么也要层层审批。<br>这样的模式下，代码根本不会有任何实质性的进步，这简直是开源界的笑话。<br><br>这样的项目还是趁早死掉吧，至少为环保低碳做了点贡献。<br><br><br><img src ="http://www.cppblog.com/stevenyao/aggbug/134906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stevenyao/" target="_blank">姚冬</a> 2010-11-28 18:49 <a href="http://www.cppblog.com/stevenyao/archive/2010/11/28/134906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何把QT变小一点</title><link>http://www.cppblog.com/stevenyao/archive/2010/10/02/128364.html</link><dc:creator>姚冬</dc:creator><author>姚冬</author><pubDate>Sat, 02 Oct 2010 14:57:00 GMT</pubDate><guid>http://www.cppblog.com/stevenyao/archive/2010/10/02/128364.html</guid><wfw:comment>http://www.cppblog.com/stevenyao/comments/128364.html</wfw:comment><comments>http://www.cppblog.com/stevenyao/archive/2010/10/02/128364.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/stevenyao/comments/commentRss/128364.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stevenyao/services/trackbacks/128364.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: QT framework 总的来说是最接近完美的C++ framework，无论架构跨平台还是性能都是一流的。<br><br>唯一美中不足的是大小，QT的库真的有点大，基础库就接近10MB了，哪怕静态链接，一个helloworld也有5MB.<br>当然qt帮我们做了那么多事情，大一点也正常，如果我们开发的是100万行代码的大项目，qt本身这点大小其实是可以忽略的。<br>但是很多时候做小软件，10万行代码左右，就显得有点大了，当然qt的代码还是有些冗余的，用zip压一下可以小一大半，发行的installer还是过得去的。<br><br>有没办法弄小一点呢？&nbsp;&nbsp;<a href='http://www.cppblog.com/stevenyao/archive/2010/10/02/128364.html'>阅读全文</a><img src ="http://www.cppblog.com/stevenyao/aggbug/128364.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stevenyao/" target="_blank">姚冬</a> 2010-10-02 22:57 <a href="http://www.cppblog.com/stevenyao/archive/2010/10/02/128364.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mercurial + Nginx + Windows 构建代码管理</title><link>http://www.cppblog.com/stevenyao/archive/2010/07/22/121013.html</link><dc:creator>姚冬</dc:creator><author>姚冬</author><pubDate>Thu, 22 Jul 2010 02:25:00 GMT</pubDate><guid>http://www.cppblog.com/stevenyao/archive/2010/07/22/121013.html</guid><wfw:comment>http://www.cppblog.com/stevenyao/comments/121013.html</wfw:comment><comments>http://www.cppblog.com/stevenyao/archive/2010/07/22/121013.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/stevenyao/comments/commentRss/121013.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stevenyao/services/trackbacks/121013.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 首先说为什么是Windows平台，因为linux/unix下已经有很多人写过了，windows下还很少有人写。<br>其实也没什么太大不同就是几个小细节，当作自己的备忘，给其他人一个参考而已<br><br>我的目的是建立一个基于http的 mercurial服务器，而且支持用户认证的访问，mercurial本来是自带一个轻量级的http服务的，但是出于安全<br>我用Nginx的反向代理功能提供Mercurial的对外访问。&nbsp;&nbsp;<a href='http://www.cppblog.com/stevenyao/archive/2010/07/22/121013.html'>阅读全文</a><img src ="http://www.cppblog.com/stevenyao/aggbug/121013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stevenyao/" target="_blank">姚冬</a> 2010-07-22 10:25 <a href="http://www.cppblog.com/stevenyao/archive/2010/07/22/121013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用 VC 编译 OpenVPN for Windows</title><link>http://www.cppblog.com/stevenyao/archive/2010/03/27/110688.html</link><dc:creator>姚冬</dc:creator><author>姚冬</author><pubDate>Sat, 27 Mar 2010 12:15:00 GMT</pubDate><guid>http://www.cppblog.com/stevenyao/archive/2010/03/27/110688.html</guid><wfw:comment>http://www.cppblog.com/stevenyao/comments/110688.html</wfw:comment><comments>http://www.cppblog.com/stevenyao/archive/2010/03/27/110688.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/stevenyao/comments/commentRss/110688.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stevenyao/services/trackbacks/110688.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: OpenVPN是很优秀的开源VPN项目，但是在Windows下用VC编译比较困难，今天花了几个小时总算编译过，但是还不保证能运行。。。&nbsp;&nbsp;<a href='http://www.cppblog.com/stevenyao/archive/2010/03/27/110688.html'>阅读全文</a><img src ="http://www.cppblog.com/stevenyao/aggbug/110688.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stevenyao/" target="_blank">姚冬</a> 2010-03-27 20:15 <a href="http://www.cppblog.com/stevenyao/archive/2010/03/27/110688.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在 QT 程序里使用Vista的 Glass 背景效果</title><link>http://www.cppblog.com/stevenyao/archive/2010/03/21/110198.html</link><dc:creator>姚冬</dc:creator><author>姚冬</author><pubDate>Sun, 21 Mar 2010 05:43:00 GMT</pubDate><guid>http://www.cppblog.com/stevenyao/archive/2010/03/21/110198.html</guid><wfw:comment>http://www.cppblog.com/stevenyao/comments/110198.html</wfw:comment><comments>http://www.cppblog.com/stevenyao/archive/2010/03/21/110198.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/stevenyao/comments/commentRss/110198.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stevenyao/services/trackbacks/110198.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在 QT 程序里使用Vista的 Glass 背景效果&nbsp;&nbsp;<a href='http://www.cppblog.com/stevenyao/archive/2010/03/21/110198.html'>阅读全文</a><img src ="http://www.cppblog.com/stevenyao/aggbug/110198.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stevenyao/" target="_blank">姚冬</a> 2010-03-21 13:43 <a href="http://www.cppblog.com/stevenyao/archive/2010/03/21/110198.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>集成 CrashReporting，收集用户崩溃报告</title><link>http://www.cppblog.com/stevenyao/archive/2010/03/17/109945.html</link><dc:creator>姚冬</dc:creator><author>姚冬</author><pubDate>Wed, 17 Mar 2010 15:58:00 GMT</pubDate><guid>http://www.cppblog.com/stevenyao/archive/2010/03/17/109945.html</guid><wfw:comment>http://www.cppblog.com/stevenyao/comments/109945.html</wfw:comment><comments>http://www.cppblog.com/stevenyao/archive/2010/03/17/109945.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/stevenyao/comments/commentRss/109945.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stevenyao/services/trackbacks/109945.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天尝试集成了CrashRpt，感觉还不错，功能很完善，集成也很容易。<br>http://code.google.com/p/crashrpt/&nbsp;&nbsp;<a href='http://www.cppblog.com/stevenyao/archive/2010/03/17/109945.html'>阅读全文</a><img src ="http://www.cppblog.com/stevenyao/aggbug/109945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stevenyao/" target="_blank">姚冬</a> 2010-03-17 23:58 <a href="http://www.cppblog.com/stevenyao/archive/2010/03/17/109945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在21天学会C++   就我所知的最简单方法</title><link>http://www.cppblog.com/stevenyao/archive/2010/03/14/109655.html</link><dc:creator>姚冬</dc:creator><author>姚冬</author><pubDate>Sun, 14 Mar 2010 04:14:00 GMT</pubDate><guid>http://www.cppblog.com/stevenyao/archive/2010/03/14/109655.html</guid><wfw:comment>http://www.cppblog.com/stevenyao/comments/109655.html</wfw:comment><comments>http://www.cppblog.com/stevenyao/archive/2010/03/14/109655.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.cppblog.com/stevenyao/comments/commentRss/109655.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stevenyao/services/trackbacks/109655.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如何在21天学会C++   就我所知的最简单方法， 有图有真相&nbsp;&nbsp;<a href='http://www.cppblog.com/stevenyao/archive/2010/03/14/109655.html'>阅读全文</a><img src ="http://www.cppblog.com/stevenyao/aggbug/109655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stevenyao/" target="_blank">姚冬</a> 2010-03-14 12:14 <a href="http://www.cppblog.com/stevenyao/archive/2010/03/14/109655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近刚修复了一个存在长达3年多的bug</title><link>http://www.cppblog.com/stevenyao/archive/2010/03/13/109609.html</link><dc:creator>姚冬</dc:creator><author>姚冬</author><pubDate>Sat, 13 Mar 2010 05:25:00 GMT</pubDate><guid>http://www.cppblog.com/stevenyao/archive/2010/03/13/109609.html</guid><wfw:comment>http://www.cppblog.com/stevenyao/comments/109609.html</wfw:comment><comments>http://www.cppblog.com/stevenyao/archive/2010/03/13/109609.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/stevenyao/comments/commentRss/109609.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/stevenyao/services/trackbacks/109609.html</trackback:ping><description><![CDATA[最近刚修复了一个存在长达3年多的bug，是这样的<br><br>软件从3.0 升级到3.1的时候，某个数据结构不再兼容了，但是一个数据处理的代码需要兼容以前3.0的数据结构。<br>于是当时的开发人员写下了这么一段代码，伪代码如下：<br><br>if isVersion(3.1) then<br>&nbsp;&nbsp; &nbsp; &nbsp; process Data in 3.1 format<br>else<br>&nbsp;&nbsp; &nbsp; &nbsp; process Data in 3.0 format<br>endif<br><br>这样的代码，当时工作很好，测试绝对没有问题，但是当软件版本继续升级到3.2....4.0....5.0....<br>问题就出来了，当时的判断是is 判断，而不是比较大小，所以3.2以及以后版本都会当作3.0处理，碰巧的是 Process data是另外开发组开发的，他们提供了一定的容错性，可以识别3.0版本的数据格式并处理，但是这样会损失一点性能，大约20％左右，但是当初数据量都不大所以测试中也没人发现。直到了5.1版本，这时候数据量变得很大了，这点性能损失变得比较明显了，因为这系统里数据处理涉及很多加密解码压缩校验以及远程调用等等。。。3年来浪费了如此多资源都来源于当初那个开发人员的一念之差，如果他写成 if versionGreatThan(3.0) 就一切OK。<br><br>我了解了一下历史，那时候正是开发很紧张的时候，进度压力很大，这个编码估计也是临时打的补丁，没有深思熟虑。<br>现实中我们不可避免地要使用些暴力手段写点 hardcode来打补丁，有时候进度压力很大，没办法的，但是我觉得应该有养成良好的习惯，在做这样的事情的时候尽量缩小影响的范围，比如可以写成这样：<br><br>if isVersion(3.1) then<br>&nbsp;&nbsp; &nbsp; &nbsp; process Data in 3.1 format<br>else if isVersion(3.0)<br>&nbsp;&nbsp; &nbsp; &nbsp; process Data in 3.0 format<br>else<br>&nbsp;&nbsp; &nbsp; &nbsp; ASSERT(FALSE)<br>endif<br><br>这样的话，当系统升级到3.2的时候这个ASSERT会跳出来，提醒你这里有问题，那时候如果时间宽裕可以去找出更优雅的解决方案。<img src ="http://www.cppblog.com/stevenyao/aggbug/109609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/stevenyao/" target="_blank">姚冬</a> 2010-03-13 13:25 <a href="http://www.cppblog.com/stevenyao/archive/2010/03/13/109609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>