﻿<?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++博客-游戏人生-随笔分类-T技术碎语</title><link>http://www.cppblog.com/Fox/category/6273.html</link><description>游戏人生 != ( 人生 == 游戏 )</description><language>zh-cn</language><lastBuildDate>Sat, 10 May 2008 18:42:28 GMT</lastBuildDate><pubDate>Sat, 10 May 2008 18:42:28 GMT</pubDate><ttl>60</ttl><item><title>周记：找回激情</title><link>http://www.cppblog.com/Fox/archive/2008/05/11/find_enthusiasm.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Sat, 10 May 2008 18:25:00 GMT</pubDate><guid>http://www.cppblog.com/Fox/archive/2008/05/11/find_enthusiasm.html</guid><wfw:comment>http://www.cppblog.com/Fox/comments/49491.html</wfw:comment><comments>http://www.cppblog.com/Fox/archive/2008/05/11/find_enthusiasm.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Fox/comments/commentRss/49491.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Fox/services/trackbacks/49491.html</trackback:ping><description><![CDATA[<p>写的太杂，实在没法写题目，就用这一周的签名吧，很合现在的心境。
<p><a href="http://www.cppblog.com/kevinlynx/" target=_blank>Kevin</a>眼中的我，大概是个<font color=#800000>重视理论算法胜过编程实践</font>的人，而我的算法和理论基础尚差的出奇（可能这就是知耻而后勇吧:D），可见我的编程实践又会多么的差了。<a href="http://www.cppblog.com/Bugs/" target=_blank>Bugs</a>更是对我整日沉浸于这些不着边际的&#8220;<font color=#800000>空中楼阁</font>&#8221;颇有微词，甚至嗤之以鼻。今日若不是要把自己前段时间的豆腐渣粉饰一番，我依然不愿去考虑多线程的具体实现，或者说不是不愿，是不敢，总有一种<font color=#800000>临深履薄</font>之感。
<p>纵然如此，为了更好的完成工作，我还是拉来Kevin，劳他为我讲解一下<a href="http://en.wikipedia.org/wiki/Multithread" target=_blank>多线程</a>，可能是因为我从未仔细看过<a href="http://en.wikipedia.org/wiki/Boost_C%2B%2B_Libraries" target=_blank>boost</a>等C++开源库的原因吧，我对于结构封装本身并没有多少概念。说句实话，看到那些模板我就头大，心里想：本来一个简单的东西，为什么要搞的那么复杂呢？当然，我知道，这是因为我对其<font color=#800000>缺乏了解</font>，在对一样东西没有完全理解就妄测其好坏是自卑的表现:D，所以也请Kevin原谅我的无知，顺便致谢;-)。
<p>还是稍微提一下多线程的东西吧，因为这一次改动并不很大，因此只言片语难以面面俱到，也请各位TX不必较真儿。这儿只是说一下我是怎么偷懒把之前没有使用多线程的I/O部分修改成多线程I/O的，I/O的细节不再详述，而且这台机器上面因为没有VS，仅凭记忆，如果有什么差错，请帮我指出来了:-)。
<p>在项目启动后的初始化中初始化I/O线程： </p>
<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; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SomeApp::Init(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;do&nbsp;some&nbsp;other&nbsp;things&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CIOOperator::Init();&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;InitializeCriticalSection&nbsp;for&nbsp;I/O&nbsp;queue(s)</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">nIOThreadsNum;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i&nbsp;)&nbsp;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CIOOperator&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pOpObj&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;CIOOperator;&nbsp;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pOpObj</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Create();&nbsp;<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_vecIOThreads.push_back(pOpObj);&nbsp;<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;do&nbsp;some&nbsp;other&nbsp;things&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">}</span></div>
<p><br>在项目退出前结束I/O线程：&nbsp;</p>
<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; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;SomeApp::Release(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)&nbsp;<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;do&nbsp;some&nbsp;other&nbsp;things&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">CIOOperator&nbsp;</span><span style="COLOR: #000000">*&gt;</span><span style="COLOR: #000000">::iterator&nbsp;it&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;m_vecIOThreads.begin();&nbsp;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(&nbsp;;&nbsp;i</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">m_vecIOThreads.end();&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">it&nbsp;)&nbsp;<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;it</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">End();&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">it);&nbsp;<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;m_vecIOThreads.clear();<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;CIOOperator::Release();&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;DeleteCriticalSectionfor&nbsp;I/O&nbsp;queue(s)</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;do&nbsp;some&nbsp;other&nbsp;things&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">}&nbsp;</span></div>
<p><br>I/O线程函数：&nbsp;&nbsp;</p>
<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; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ThreadFunc(&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pArgument&nbsp;)<br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;do&nbsp;some&nbsp;other&nbsp;things,&nbsp;like&nbsp;exception&nbsp;handling&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;(CIOOperator&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)pArgument</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Run();&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;operating&nbsp;I/O&nbsp;queue(s)&nbsp;until&nbsp;exit</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.cppblog.com/Images/dot.gif">&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;do&nbsp;some&nbsp;other&nbsp;things&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;_endthreadex();<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<p>说多线程复杂，无外乎线程的<font color=#800000>退出策略</font>、<font color=#800000>同步机制</font>、<font color=#800000>调试</font>、<font color=#800000>异常处理</font>等等。多少还是需要一些知识（尤其是同步）和经验（尤其是<font color=#800000>调试</font>）。</p>
<p>再回来说一下最近比较关注的算法吧，虽然为某些人所不齿，甚至公然批评我最近比较松懈，实在令我难堪的紧。我又没有消极怠工，难道编写代码是积极，学习算法就是消极吗？乡下来的，且不必理他。当然，多少还是需要注意一下分寸吧。</p>
<p>在受到上次解决<a href="http://www.cppblog.com/Fox/archive/2008/04/20/flapjack_sortting.html">烙饼排序问题</a>的打击之后，我开始反思：自己思考和解决问题的角度怎么就那么简单和狭隘？细细想来，从本科毕业之后，几乎再没翻过算法的书，几乎再没做过算法的题，写代码只是为了糊口，只能糊口的代码自然只能以垃圾形容。意识粗糙，操作离谱，整个一下里巴人。
<p>在一番深深的自责之后，痛定思痛，痛何如哉，才感觉自己关于算法的思维空间已经局限于if-else、do-while，连穷举、分治、贪心、回溯这些以前念书时天天挂在嘴边侃侃而谈的常用算法都没有概念了，遑论动态规划、最小二乘法、线性回归等复杂一些的（非）数值算法，关于数据结构的思维空间也已经局限于vector、list、map了，再也没有回忆过stack、tree、graph这些读死书、死读书得来的所谓知识。&nbsp;
<p>可悲啊，为什么拿到一个困难一点的问题，就只知道画图、编码，而不知道组织算法呢？甚至连这个问题到底有无多项式时间解都不去考虑。然而，一提谁都知道：<font color=#800000>算法复杂性</font>——数据结构第0章就会提到的基础，真正分析起来，却是力不从心。
<p>所以，接着扫扫盲吧，实在没有必要去搞很多艰深的东西，本来想接下来就写<a href="http://en.wikipedia.org/wiki/NP_%28complexity%29" target=_blank>NP难题</a>，可是近来工作上的事情确实有些多，之前一篇已经是被<a href="http://www.cppblog.com/Alex/" target=_blank>Alex</a>（这家伙却至今未开张&#8230;&#8230;）&#8220;催出来&#8221;的了。</p>
<p>手头只有MIT英文版的《<a href="http://mitpress.mit.edu/algorithms/">Introduction to Algorithms</a>》ed.2，于是就从网上找了中文电子版，居然是上个世纪94年南京大学译的第一版。看算法的话，多半是以这本书和<a href="http://en.wikipedia.org/wiki/Wikipedia" target=_blank>Wikipedia</a>为主了。</p>
<p>PS: 另外做的一点事情，似乎和<a href="http://en.wikipedia.org/wiki/Lexical_analysis" target=_blank>词法分析</a>、<a href="http://en.wikipedia.org/wiki/Exception_handling" target=_blank>异常处理</a>等多少有些关联，内容相当琐碎，此刻不再赘述。</p>
<p>对了，和工作、学习并不那么相干的事情就是，今天和几个同事出去钓了几个小时鱼，收获嘛，保密:D。</p>
<p>近期考虑的关键词：无缝世界 网游安全 算法导论 兄弟激情</p><img src ="http://www.cppblog.com/Fox/aggbug/49491.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Fox/" target="_blank">Fox</a> 2008-05-11 02:25 <a href="http://www.cppblog.com/Fox/archive/2008/05/11/find_enthusiasm.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编程之美：中国象棋将帅问题</title><link>http://www.cppblog.com/Fox/archive/2008/04/18/chinese_chess_one_param.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Thu, 17 Apr 2008 16:26:00 GMT</pubDate><guid>http://www.cppblog.com/Fox/archive/2008/04/18/chinese_chess_one_param.html</guid><wfw:comment>http://www.cppblog.com/Fox/comments/47457.html</wfw:comment><comments>http://www.cppblog.com/Fox/archive/2008/04/18/chinese_chess_one_param.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/Fox/comments/commentRss/47457.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Fox/services/trackbacks/47457.html</trackback:ping><description><![CDATA[<p>Author: Fox</p>
<p>晚上没有加班，打游戏打到9点过，后面就又看了一道《<a href="http://www.china-pub.com/38070" target=_blank>编程之美</a>》的题目《<a href="http://book.csdn.net/bookfiles/656/10065620784.shtml" target=_blank>中国象棋将帅问题</a>》。</p>
<p><font color=#800000>题目：下过中国象棋的朋友都知道，双方的&#8220;将&#8221;和&#8220;帅&#8221;相隔遥远，并且它们不能照面。在象棋残局中，许多高手能利用这一规则走出精妙的杀招。假设棋盘上只有&#8220;将&#8221;和&#8220;帅&#8221;二子（如图1-3所示）（为了下面叙述方便，我们约定用<em>A</em>表示&#8220;将&#8221;，<em>B</em>表示&#8220;帅&#8221;）：</font></p>
<p align=center><font color=#800000><img height=243 alt=1-3副本 src="http://book.csdn.net/BookFiles/656/img/image003.jpg" width=224 border=0></font></p>
<p><font color=#800000><em>A</em>、<em>B</em>二子被限制在己方3&#215;3的格子里运动。例如,在如上的表格里，<em>A</em>被正方形{<em>d</em><sub>10</sub>, <em>f</em><sub>10</sub>, <em>d</em><sub>8</sub>, <em>f</em><sub>8</sub>}包围，而<em>B</em>被正方形{<em>d</em><sub>3</sub>, <em>f</em><sub>3</sub>, <em>d</em><sub>1</sub>, <em>f</em><sub>1</sub>}包围。每一步，<em>A</em>、<em>B</em>分别可以横向或纵向移动一格，但不能沿对角线移动。另外，<em>A</em>不能面对<em>B</em>，也就是说，<em>A</em>和<em>B</em>不能处于同一纵向直线上（比如<em>A</em>在<em>d</em><sub>10</sub>的位置，那么<em>B</em>就不能在<em>d</em><sub>1</sub>、<em>d</em><sub>2</sub>以及<em>d</em><sub>3</sub>）。</font>
<p><font color=#800000>请写出一个程序，输出<em>A</em>、<em>B</em>所有合法位置。要求在代码中只能使用一个变量。</font>
<p><font color=#800000></font>
<p>在纸上画了半天，Soft从台湾给带的长寿都让我抽完了，总算对得起这会儿工夫&#8230;&#8230;</p>
<p>我的思路大致如下：</p>
<p>1) 只能使用一个变量nNum ==&gt; 只能使用一个循环，nNum只能用来表示A、B位置的组合，nNum最大为9&#215;9-1=80；</p>
<p>2) 如何用nNum表示一个A、B位置的组合？</p>
<p>下图表示<font color=#800000>A（红色）</font>、<font color=#000080>B（蓝色）</font>所在位置：</p>
<table cellSpacing=0 cellPadding=20 width=102 align=center border=1>
    <tbody>
        <tr>
            <td vAlign=top width=51><font color=#800000>6</font></td>
            <td vAlign=top width=51><font color=#800000>7</font></td>
            <td vAlign=top width=51><font color=#800000>8</font></td>
        </tr>
        <tr>
            <td vAlign=top width=51><font color=#800000>3</font></td>
            <td vAlign=top width=51><font color=#800000>4</font></td>
            <td vAlign=top width=51><font color=#800000>5</font></td>
        </tr>
        <tr>
            <td vAlign=top width=51><font color=#800000>0</font></td>
            <td vAlign=top width=51><font color=#800000>1</font></td>
            <td vAlign=top width=51><font color=#800000>2</font></td>
        </tr>
        <tr>
            <td vAlign=top width=51><font color=#000080>6</font></td>
            <td vAlign=top width=51><font color=#000080>7</font></td>
            <td vAlign=top width=51><font color=#000080>8</font></td>
        </tr>
        <tr>
            <td vAlign=top width=51><font color=#000080>3</font></td>
            <td vAlign=top width=51><font color=#000080>4</font></td>
            <td vAlign=top width=51><font color=#000080>5</font></td>
        </tr>
        <tr>
            <td vAlign=top width=51><font color=#000080>0</font></td>
            <td vAlign=top width=51><font color=#000080>1</font></td>
            <td vAlign=top width=51><font color=#000080>2</font></td>
        </tr>
    </tbody>
</table>
<p>以<font color=#800000>nNum%9表示A的位置</font>，<font color=#000080>nNum/9表示B的位置</font>，如nNum==15，<font color=#800000>A==6</font>，<font color=#000080>B==1</font>。</p>
<p>3) 如何确定A、B位置的合法性？</p>
<p>规则都指定了，合法性的确定也就很简单了：A%3 != B%3。</p>
<p>OK，剩下的输出就很简单了，为了好看一点，这里希望直接按题目给的图表示出A、B的位置，如：&#8220;<font color=#800000>A:d10</font>, <font color=#000080>B:e3</font>&#8221;，还有颜色:D。</p>
<p>A的行号：A/3+8；</p>
<p>A的列号：A%3+d；</p>
<p>B的行号：B/3+1；</p>
<p>B的列号：B%3+d；</p>
<p>代码如下（注释掉的部分只是为了输出更&#8220;漂亮&#8221;一点）：<br></p>
<p>&nbsp;</p>
<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; FONT-FAMILY: courier new; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">&nbsp;1</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">#include&nbsp;&lt;windows.h&gt;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">HANDLE&nbsp;hStdout;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">CONSOLE_SCREEN_BUFFER_INFO&nbsp;csbiInfo;<br></span><span style="COLOR: #008080">&nbsp;6</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">WORD&nbsp;wOldColorAttrs;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;_tmain(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;_TCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;argv[])<br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">hStdout&nbsp;=&nbsp;GetStdHandle(STD_OUTPUT_HANDLE);<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">GetConsoleScreenBufferInfo(hStdout,&nbsp;&amp;csbiInfo);<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">wOldColorAttrs&nbsp;=&nbsp;csbiInfo.wAttributes;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nNum&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">81</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;nNum表示所有位置（含非法），故nNum&nbsp;=&nbsp;3&nbsp;*&nbsp;3&nbsp;*&nbsp;3&nbsp;*&nbsp;3</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(&nbsp;nNum</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;)<br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">17</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(&nbsp;nNum</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;nNum</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">&nbsp;)<br></span><span style="COLOR: #008080">18</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="COLOR: #008080">19</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">SetConsoleTextAttribute(hStdout,&nbsp;FOREGROUND_RED&nbsp;|&nbsp;FOREGROUND_INTENSITY);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">20</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">A:%x%02d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;nNum</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0xd</span><span style="COLOR: #000000">,&nbsp;nNum</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">21</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">SetConsoleTextAttribute(hStdout,&nbsp;FOREGROUND_BLUE&nbsp;|&nbsp;FOREGROUND_INTENSITY);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">22</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">B:%x%02d&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;nNum</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">0xd</span><span style="COLOR: #000000">,&nbsp;nNum</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">23</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: #008080">24</span>&nbsp;<span style="COLOR: #000000">&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">(nNum</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">)&nbsp;)<br></span><span style="COLOR: #008080">25</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">26</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;};<br></span><span style="COLOR: #008080">27</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">28</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">SetConsoleTextAttribute(hStdout,&nbsp;wOldColorAttrs);</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">29</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">30</span>&nbsp;<span style="COLOR: #000000">}</span></div>
<p>输出：</p>
<p align=center><a href=http://picasaweb.google.com/yulefox/Blog/photo#5190249214067771810 target=_blank><img src="http://lh3.ggpht.com/yulefox/SAd4KTxCiaI/AAAAAAAAAK8/WyHyft6R-QY/s800/one_param_output.JPG">点击查看更清晰原图:D</a> </p>
<p>PS: 刚写完，没有来得及总结更多，急着向<a href="http://pekingone.blog.sohu.com/" target=_blank>LP</a>炫耀。但上面的思路应该比较清晰了，也不管书上的答案了，反正我感觉我这点代码效率应该也不会低到哪儿吧:-)？</p><img src ="http://www.cppblog.com/Fox/aggbug/47457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Fox/" target="_blank">Fox</a> 2008-04-18 00:26 <a href="http://www.cppblog.com/Fox/archive/2008/04/18/chinese_chess_one_param.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编程之美：让CPU占用率曲线听你指挥</title><link>http://www.cppblog.com/Fox/archive/2008/04/17/control_cpu_using_curve.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Wed, 16 Apr 2008 16:20:00 GMT</pubDate><guid>http://www.cppblog.com/Fox/archive/2008/04/17/control_cpu_using_curve.html</guid><wfw:comment>http://www.cppblog.com/Fox/comments/47343.html</wfw:comment><comments>http://www.cppblog.com/Fox/archive/2008/04/17/control_cpu_using_curve.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/Fox/comments/commentRss/47343.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Fox/services/trackbacks/47343.html</trackback:ping><description><![CDATA[<p>Author: Fox</p> <p>前两天在买《<a href="http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming" target="_blank">计算机程序设计艺术</a>》中文版的时候，偶然发现《<a href="http://www.china-pub.com/38070" target="_blank">编程之美</a>》这本书，当时翻了一下，看到“<font color="#800000">让CPU占用率曲线听你指挥</font>”这样的题目确实让人为之一动。写一段代码，可以让CPU占有率曲线画出平滑的正弦曲线，有点意思:-)。</p> <p>当然，最后没有买这本书，虽然我可以肯定这是本好书。</p> <p>我从<a href="http://book.csdn.net/" target="_blank">CSDN读书</a>上找到几节，闲来读一读。今天来讨论一下《<a href="http://book.csdn.net/bookfiles/656/10065620783.shtml" target="_blank">让CPU占用率曲线听你指挥</a>》。</p> <p><font color="#800000">题目：写一个程序，让用户来决定Windows任务管理器（Task Manager）的CPU占用率。程序越精简越好，计算机语言不限。例如，可以实现下面三种情况：</font></p> <p><font color="#800000">1.&nbsp;&nbsp;&nbsp; CPU的占用率固定在50%，为一条直线；</font> <p><font color="#800000">2.&nbsp;&nbsp;&nbsp; CPU的占用率为一条直线，但是具体占用率由命令行参数决定（参数范围1~ 100）；</font> <p><font color="#800000">3.&nbsp;&nbsp;&nbsp; CPU的占用率状态是一个正弦曲线。</font> <p>在讨论具体实现之前，一个非常重要的问题是：<font color="#800000">什么是CPU占用率</font>？</p> <p>《<a href="http://www.china-pub.com/38070" target="_blank">编程之美</a>》写道：“<font color="#800000">在任务管理器的一个刷新周期内，CPU忙（执行应用程序）的时间和刷新周期总时间的比率，就是CPU的占用率，也就是说，任务管理器中显示的是每个刷新周期内CPU占用率的统计平均值。</font>”</p> <p>打开“Windows 任务管理器”，“性能”中有“CPU使用记录”一项，给出的就是CPU占有率曲线。</p> <p>至于一个刷新周期到底是多长，<a href="http://book.csdn.net/bookfiles/656/10065620783.shtml" target="_blank">书中</a>似乎没有明确给出，只是说“大约是1秒钟更新一次”，我打开Windows自带的时钟，也感觉大约是1秒钟。</p> <p>另外的常识是：</p> <p>单核环境下，空死循环会导致100%的CPU占有率。双核环境下，CPU总占有率大约为50%，四核会不会是25%左右呢？（我没有四核，只能猜测了，估计各核间切换也会耗掉点时间，因为我的双核环境并没有出现一核100%，另一核空闲的情况）。</p> <p>当CPU整个刷新周期（绝大多数时间）空闲时，CPU占有率趋于0。</p> <p><a href="http://book.csdn.net/bookfiles/656/10065620783.shtml" target="_blank">书中</a>给出的正弦实现如下：</p> <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; font-family: courier new; background-color: #eeeeee"><span style="color: #008080">1</span>&nbsp;<span style="color: #000000">#include </span><span style="color: #000000">"</span><span style="color: #000000">Windows.h</span><span style="color: #000000">"</span><span style="color: #000000"><br></span><span style="color: #008080">2</span>&nbsp;<span style="color: #000000">#include </span><span style="color: #000000">"</span><span style="color: #000000">stdlib.h</span><span style="color: #000000">"</span><span style="color: #000000"><br></span><span style="color: #008080">3</span>&nbsp;<span style="color: #000000">#include </span><span style="color: #000000">"</span><span style="color: #000000">math.h</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br></span><span style="color: #008080">4</span>&nbsp;<span style="color: #000000"><br></span><span style="color: #008080">5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000"> SPLIT </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0.01</span><span style="color: #000000">;<br></span><span style="color: #008080">6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000"> COUNT </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">200</span><span style="color: #000000">;<br></span><span style="color: #008080">7</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000"> PI </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3.14159265</span><span style="color: #000000">;<br></span><span style="color: #008080">8</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000"> INTERVAL </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">300</span><span style="color: #000000">; <br></span><span style="color: #008080">9</span>&nbsp;<span style="color: #000000"><br></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000"> _tmain(</span><span style="color: #0000ff">int</span><span style="color: #000000"> argc, _TCHAR</span><span style="color: #000000">*</span><span style="color: #000000"> argv[])<br></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">{<br></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; DWORD busySpan[COUNT];&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">array of busy times</span><span style="color: #008000"><br></span><span style="color: #008080">13</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp; DWORD idleSpan[COUNT];&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">array of idle times</span><span style="color: #008000"><br></span><span style="color: #008080">14</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">int</span><span style="color: #000000"> half </span><span style="color: #000000">=</span><span style="color: #000000"> INTERVAL </span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">double</span><span style="color: #000000"> radian </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0.0</span><span style="color: #000000">;<br></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">; i </span><span style="color: #000000">&lt;</span><span style="color: #000000"> COUNT; i</span><span style="color: #000000">++</span><span style="color: #000000">)<br></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; {<br></span><span style="color: #008080">18</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; busySpan[i] </span><span style="color: #000000">=</span><span style="color: #000000"> (DWORD)(half </span><span style="color: #000000">+</span><span style="color: #000000"> (sin(PI </span><span style="color: #000000">*</span><span style="color: #000000"> radian) </span><span style="color: #000000">*</span><span style="color: #000000"> half));<br></span><span style="color: #008080">19</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; idleSpan[i] </span><span style="color: #000000">=</span><span style="color: #000000"> INTERVAL </span><span style="color: #000000">-</span><span style="color: #000000"> busySpan[i];<br></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; radian </span><span style="color: #000000">+=</span><span style="color: #000000"> SPLIT;<br></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; }<br></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; DWORD startTime </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">int</span><span style="color: #000000"> j </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">while</span><span style="color: #000000"> (</span><span style="color: #0000ff">true</span><span style="color: #000000">)<br></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; {<br></span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j </span><span style="color: #000000">=</span><span style="color: #000000"> j </span><span style="color: #000000">%</span><span style="color: #000000"> COUNT;<br></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startTime </span><span style="color: #000000">=</span><span style="color: #000000"> GetTickCount();<br></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">while</span><span style="color: #000000"> ((GetTickCount() </span><span style="color: #000000">-</span><span style="color: #000000"> startTime) </span><span style="color: #000000">&lt;=</span><span style="color: #000000"> busySpan[j]) ;<br></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sleep(idleSpan[j]);<br></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j</span><span style="color: #000000">++</span><span style="color: #000000">;<br></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; }<br></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">}</span></div> <p><br>在单核环境（P4 2.40）下，其表现还是不错的：</p> <p align="center"><a href="http://picasaweb.google.com/yulefox/Blog/photo#5189783656792754530"><img src="http://lh5.ggpht.com/yulefox/SAXQvTxCiWI/AAAAAAAAAI4/pG3RTW7cK48/s144/cpu_curve_sin.jpg">点击查看大图</a></p> <p>在双核环境（Core2 E4500）下，就有点<strike>差强人意</strike>不尽人意了：</p> <p align="center"><a href="http://picasaweb.google.com/yulefox/Blog/photo#5189783669677656434"><img src="http://lh4.ggpht.com/yulefox/SAXQwDxCiXI/AAAAAAAAAJA/uAcw6fG2HsA/s144/cpu_curve_sin_core2.jpg">点击查看大图</a></p> <p>不过，总还能看出是正弦曲线。</p> <p>上面两图的问题：</p> <p>1) 单核时曲线不够平滑，是由于QQ等程序占用CPU所致；</p> <p>2) 双核时曲线更加抖动，我的理解是除其他程序影响外，由于线程没有固定运行在一个CPU上导致的，后面看到<a href="http://book.csdn.net/bookfiles/656/10065620783.shtml" target="_blank">书上</a>提到<font color="#800000">线程迁移</font>，个人感觉这个叫法欠妥啊，总觉得<font color="#800000">线程迁移</font>令人费解。</p> <p>可以立即想到的是：<font color="#800000">让进程在指定处理器上运行（处理器亲缘关系）</font>，由Windows提供了两个API可以做到这一点：<strong>GetCurrentProcess</strong>和<strong>SetProcessAffinityMask</strong>的。</p> <p>修改之后的代码如下：</p> <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; font-family: courier new; background-color: #eeeeee"><span style="color: #008080">1</span>&nbsp;<span style="color: #000000">#include </span><span style="color: #000000">"</span><span style="color: #000000">Windows.h</span><span style="color: #000000">"</span><span style="color: #000000"><br></span><span style="color: #008080">2</span>&nbsp;<span style="color: #000000">#include </span><span style="color: #000000">"</span><span style="color: #000000">stdlib.h</span><span style="color: #000000">"</span><span style="color: #000000"><br></span><span style="color: #008080">3</span>&nbsp;<span style="color: #000000">#include </span><span style="color: #000000">"</span><span style="color: #000000">math.h</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;<br></span><span style="color: #008080">4</span>&nbsp;<span style="color: #000000"><br></span><span style="color: #008080">5</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000"> SPLIT </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0.01</span><span style="color: #000000">;<br></span><span style="color: #008080">6</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000"> COUNT </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">200</span><span style="color: #000000">;<br></span><span style="color: #008080">7</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000"> PI </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3.14159265</span><span style="color: #000000">;<br></span><span style="color: #008080">8</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000"> INTERVAL </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">300</span><span style="color: #000000">; <br></span><span style="color: #008080">9</span>&nbsp;<span style="color: #000000"><br></span><span style="color: #008080">10</span>&nbsp;<span style="color: #000000"></span><span style="color: #0000ff">int</span><span style="color: #000000"> _tmain(</span><span style="color: #0000ff">int</span><span style="color: #000000"> argc, _TCHAR</span><span style="color: #000000">*</span><span style="color: #000000"> argv[])<br></span><span style="color: #008080">11</span>&nbsp;<span style="color: #000000">{<br></span><span style="color: #008080">12</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp; <span style="color: red">SetProcessAffinityMask</span>(<br></span><span style="color: #008080">13</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: red">GetCurrentProcess</span>(),<br></span><span style="color: #008080">14</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: red">0x00000001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">//cpu mask</span></span><span style="color: #000000"><br></span><span style="color: #008080">15</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ); <br></span><span style="color: #008080">16</span>&nbsp;<span style="color: #000000"><br></span><span style="color: #008080">17</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; DWORD busySpan[COUNT];&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">array of busy times</span><span style="color: #008000"><br></span><span style="color: #008080">18</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp; DWORD idleSpan[COUNT];&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">array of idle times</span><span style="color: #008000"><br></span><span style="color: #008080">19</span>&nbsp;<span style="color: #008000"></span><span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">int</span><span style="color: #000000"> half </span><span style="color: #000000">=</span><span style="color: #000000"> INTERVAL </span><span style="color: #000000">/</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">;<br></span><span style="color: #008080">20</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">double</span><span style="color: #000000"> radian </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0.0</span><span style="color: #000000">;<br></span><span style="color: #008080">21</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000"> i </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">; i </span><span style="color: #000000">&lt;</span><span style="color: #000000"> COUNT; i</span><span style="color: #000000">++</span><span style="color: #000000">)<br></span><span style="color: #008080">22</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; {<br></span><span style="color: #008080">23</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; busySpan[i] </span><span style="color: #000000">=</span><span style="color: #000000"> (DWORD)(half </span><span style="color: #000000">+</span><span style="color: #000000"> (sin(PI </span><span style="color: #000000">*</span><span style="color: #000000"> radian) </span><span style="color: #000000">*</span><span style="color: #000000"> half));<br></span><span style="color: #008080">24</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; idleSpan[i] </span><span style="color: #000000">=</span><span style="color: #000000"> INTERVAL </span><span style="color: #000000">-</span><span style="color: #000000"> busySpan[i];<br></span><span style="color: #008080">25</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; radian </span><span style="color: #000000">+=</span><span style="color: #000000"> SPLIT;<br></span><span style="color: #008080">26</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; }<br></span><span style="color: #008080">27</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; DWORD startTime </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br></span><span style="color: #008080">28</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">int</span><span style="color: #000000"> j </span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br></span><span style="color: #008080">29</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">while</span><span style="color: #000000"> (</span><span style="color: #0000ff">true</span><span style="color: #000000">)<br></span><span style="color: #008080">30</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; {<br></span><span style="color: #008080">31</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j </span><span style="color: #000000">=</span><span style="color: #000000"> j </span><span style="color: #000000">%</span><span style="color: #000000"> COUNT;<br></span><span style="color: #008080">32</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; startTime </span><span style="color: #000000">=</span><span style="color: #000000"> GetTickCount();<br></span><span style="color: #008080">33</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">while</span><span style="color: #000000"> ((GetTickCount() </span><span style="color: #000000">-</span><span style="color: #000000"> startTime) </span><span style="color: #000000">&lt;=</span><span style="color: #000000"> busySpan[j]) ;<br></span><span style="color: #008080">34</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Sleep(idleSpan[j]);<br></span><span style="color: #008080">35</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j</span><span style="color: #000000">++</span><span style="color: #000000">;<br></span><span style="color: #008080">36</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; }<br></span><span style="color: #008080">37</span>&nbsp;<span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br></span><span style="color: #008080">38</span>&nbsp;<span style="color: #000000">}</span></div> <p><br>双核环境（Core2 E4500）修改之后的输出如下：</p> <p align="center"><a href="http://picasaweb.google.com/yulefox/Blog/photo#5189877484648302978"><img src="http://lh4.ggpht.com/yulefox/SAYmEzxCiYI/AAAAAAAAAJ4/822JVBb5o3s/s144/cpu_curve_sin_core2_cpu1.jpg">点击查看大图</a></p> <p>我理想中的表现是：</p> <p><font color="#800000">1) 曲线是平滑的，最好不因其他应用程序或操作的执行而改变；</font></p> <p><font color="#800000">2) 不管是单核还是双核，峰值皆为100%，谷值为0。</font></p> <p>对于第一点，其实就是保证任一刷新周期中的CPU占有率都可以被精确控制在0-100之间，如果你可以使CPU一直保持50%（而不是近似的上下波动），产生一条平滑的曲线就很easy了。</p> <p>问题的关键在于，除了当前你写的程序可以控制，其他程序或操作如何控制？或者说：<font color="#800000">如何控制CPU的运行情况才是关键之处</font>。</p> <p>PS: 一晚上老是断网，搞得思路频频被打断，兴致也损了大半。总之，《<a href="http://www.china-pub.com/38070" target="_blank">编程之美</a>》还是值得玩味一把吧:D。</p><img src ="http://www.cppblog.com/Fox/aggbug/47343.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Fox/" target="_blank">Fox</a> 2008-04-17 00:20 <a href="http://www.cppblog.com/Fox/archive/2008/04/17/control_cpu_using_curve.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何阅读、使用Blog?</title><link>http://www.cppblog.com/Fox/archive/2008/04/15/read_use_blog.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Tue, 15 Apr 2008 07:59:00 GMT</pubDate><guid>http://www.cppblog.com/Fox/archive/2008/04/15/read_use_blog.html</guid><wfw:comment>http://www.cppblog.com/Fox/comments/47131.html</wfw:comment><comments>http://www.cppblog.com/Fox/archive/2008/04/15/read_use_blog.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Fox/comments/commentRss/47131.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Fox/services/trackbacks/47131.html</trackback:ping><description><![CDATA[<p>Author: Fox</p> <p>本文写给满足以下条件的你（前面4点对应只读的你，后面4点对应只写的你)：</p> <p>1) 经常阅读别人的Blog，所谓经常，平均每天阅读量在100篇左右；</p> <p>2) 不希望花费大量时间在输入网址、鼠标点击和滚动上；</p> <p>3) 有固定的阅读习惯，指专注于某一领域、某些特定的Blog；</p> <p>4) 尚未使用或刚使用<a href="http://www.google.com/reader" target="_blank">Google Reader</a>并愿意使用<a href="http://www.google.com/reader" target="_blank">Google Reader</a>；</p> <p>5) 经常更新自己的Blog，所谓经常，平均每月更新1篇或以上；</p> <p>2) 不希望花费大量时间在复制、粘贴上；</p> <p>3) 希望多与其他人交流；</p> <p>4) 尚未使用或刚使用<a href="http://get.live.com/writer/overview" target="_blank">Windows Live Writer</a>并愿意使用<a href="http://get.live.com/writer/overview" target="_blank">Windows Live Writer</a>。</p> <p>1、For只读的你</p> <p>1) 启用<a href="http://www.google.com/reader" target="_blank">Google Reader</a></p> <p>做互联网的就是做互联网的，<a href="http://www.google.com/" target="_blank">Google</a>的<a href="http://www.google.com/reader" target="_blank">Google Reader</a>有个帐号就能开启。</p> <p>之前写过一个<a href="http://www.cppblog.com/Fox/articles/tutorial_for_gf.html" target="_blank">给我GF看的一点东西</a>，这儿对于启用<a href="http://www.google.com/reader" target="_blank">Google Reader</a>不再赘述了，有需要的TX可以看一下或者直接<a href="http://www.google.com/" target="_blank">Google</a>；</p> <p>2) 添加<a title="什么是RSS地址" href="http://baike.baidu.com/view/1644.htm" target="_blank">RSS地址</a></p> <p>首先要找到<a href="http://baike.baidu.com/view/1644.htm" target="_blank">RSS地址</a>，大多数网站提供的Blog，<a href="http://baike.baidu.com/view/1644.htm" target="_blank">RSS地址</a>都摆在显眼的地方，对于QQ空间这种算不上Blog的Blog来说，QQ空间的RSS也存在，比如，QQ号码为10000的用户，它的RSS就是：<a href="http://feeds.qzone.qq.com/cgi-bin/cgi_rss_out?uin=10000" target="_blank">http://feeds.qzone.qq.com/cgi-bin/cgi_rss_out?uin=10000</a>。</p> <p>找到<a href="http://baike.baidu.com/view/1644.htm" target="_blank">RSS地址</a>之后，就可以将其添加到订阅列表里面了。</p> <p>3) 关于<a title="什么是OPML" href="http://baike.baidu.com/view/127329.htm" target="_blank">OPML</a></p> <p>如果你想共享或备份你的订阅，<a href="http://www.google.com/reader" target="_blank">Google Reader</a>具有“导入/导出”功能，不提供具体的使用方式了，<a href="http://www.google.com/" target="_blank">Google</a>吧。</p> <p>4) 星标和标签</p> <p>看过的好文希望下次再读，就加个星标吧。</p> <p>RSS太多，就使用标签吧。</p> <p>觉得我这儿写的太简单，就<a href="http://www.google.com/" target="_blank">Google</a>吧，或者看看<a href="http://www.williamlong.info/archives/655.html" target="_blank">Google Reader的四个常用小技巧</a>。</p> <p>2、For只写的你</p> <p>1) 使用<a href="http://get.live.com/writer/overview" target="_blank">Windows Live Writer</a></p> <p>做软件的就是做软件的，Microsoft的这个<a href="http://get.live.com/writer/overview" target="_blank">Windows Live Writer</a>是要下载安装的。</p> <p>具体如何去用，下载下来自然就会用了。</p> <p>友情提示：<a href="http://get.live.com/writer/overview" target="_blank">Live Writer</a>的格式、超链接、查看、草稿、帐户、日志、分类列表，都很好用。</p> <p>2) 关于<a title="什么是CSS" href="http://baike.baidu.com/view/15916.htm" target="_blank">CSS</a></p> <p>我不太喜欢Blog的页面太乱，一会儿五号字，一会儿二号字，一会儿宋体，一会儿楷体。</p> <p>我喜欢把一些我认为<font color="#800000">重要的地方</font>和<a href="http://www.cppblog.com/fox/" target="_blank">链接的内容</a>突出显示，以前没添加<a title="什么是CSS" href="http://baike.baidu.com/view/15916.htm" target="_blank">CSS</a>的时候，每次都要自己去一个一个的修改链接的字体和颜色，浪费很多时间，如果你的Blog支持<a title="什么是CSS" href="http://baike.baidu.com/view/15916.htm" target="_blank">CSS</a>，就去看一下怎么使用吧，比如我的<a title="什么是CSS" href="http://baike.baidu.com/view/15916.htm" target="_blank">CSS</a>就很简单：</p> <p>&lt;style type=text/css&gt;<br>#top a{ border-bottom:1px dashed; color:white;&nbsp; }<br>#top a:link{ border-bottom:1px dashed; color:white; }<br>#top a:hover{ border-bottom:1px dashed; color:white; }<br>#top a:visited{ border-bottom:1px dashed; color:white; }<br>.post a:link{ border-bottom:1px dashed; color:maroon; }<br>.post a:hover{ border-bottom:1px dashed; color:maroon; }<br>.post a:visited{ border-bottom:1px dashed; color:maroon; }<br>.postbody a{ color:white; background:maroon;&nbsp; }<br>.postbody a:link{ color:white; background:maroon;&nbsp; }<br>.postbody a:hover{ color:white; background:maroon; }<br>.postbody a:visited{ color:white; background:maroon; }<br>&lt;/style&gt;  <p>我还使用了<a href="http://www.google.cn/search?complete=1&amp;hl=zh-CN&amp;newwindow=1&amp;q=devtoolbar&amp;meta=&amp;aq=0&amp;oq=devtoo" target="_blank">DevToolBar</a>帮助我确定了CSS。</p> <p>3) 添加Google专用的订阅</p> <p>我为此还专门PS了一张图片，你可以将下面的代码放到“<font color="#800000">公告</font>”里面，当然，你想放到哪儿就放到哪儿：</p> <p>&lt;br /&gt;订阅到：&lt;br /&gt;<br>&lt;a href="<a href="http://fusion.google.com/add?source=atgs&amp;feedurl=http%3A//www.cppblog.com/Fox/Rss.aspx&quot;">http://fusion.google.com/add?source=atgs&amp;feedurl=http%3A//www.cppblog.com/Fox/Rss.aspx"</a>&gt;&lt;img src="<a href="http://www.cppblog.com/images/cppblog_com/Fox/6064/o_GoogleRss.jpg&quot;">http://www.cppblog.com/images/cppblog_com/Fox/6064/o_GoogleRss.jpg"</a> border="0" alt="添加 游戏人生 到 Google 阅读器"&gt;&lt;/a&gt;&lt;br /&gt;  <p>我这儿是有图片的，只有文字的就是这样：</p> <p>&lt;br /&gt;订阅到：&lt;br /&gt;<br>&lt;a href="<a href="http://fusion.google.com/add?source=atgs&amp;feedurl=http%3A//www.cppblog.com/Fox/Rss.aspx">http://fusion.google.com/add?source=atgs&amp;feedurl=http%3A//www.cppblog.com/Fox/Rss.aspx"</a>&gt;添加 游戏人生 到 Google 阅读器&lt;/a&gt;&lt;br /&gt;  <p>上面的<a href="http://www.cppblog.com/Fox/Rss.aspx">www.cppblog.com/Fox/Rss.aspx</a>是我的<a title="什么是RSS地址" href="http://baike.baidu.com/view/1644.htm" target="_blank">RSS地址</a>，你要换成你的:-)。  <p>4) 关于邮箱地址  <p><font color="#800000">不要把邮箱地址直接放在页面上</font>，我之前曾经这样做，后面每天收到不少的垃圾邮件，就取消了，因为这年头，写个邮箱地址搜索器，然后发垃圾邮件太easy了。  <p>PS: 好用的东西还很多，因为我自己是GFans，所有在工作、学习和生活中使用了Analytics、Gmail、iGoogle、Picasa、Reader、Talk、笔记本、快讯、日历、网页历史记录、网站管理员工具、文件，反正都是免费的，而且用来比较方便，一个帐号可以搞定很多东西:D。</p><img src ="http://www.cppblog.com/Fox/aggbug/47131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Fox/" target="_blank">Fox</a> 2008-04-15 15:59 <a href="http://www.cppblog.com/Fox/archive/2008/04/15/read_use_blog.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴：成都锦天科技（隶属上海盛大网络） 招聘信息！ </title><link>http://www.cppblog.com/Fox/archive/2008/04/11/invite_job.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Fri, 11 Apr 2008 04:41:00 GMT</pubDate><guid>http://www.cppblog.com/Fox/archive/2008/04/11/invite_job.html</guid><wfw:comment>http://www.cppblog.com/Fox/comments/46825.html</wfw:comment><comments>http://www.cppblog.com/Fox/archive/2008/04/11/invite_job.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Fox/comments/commentRss/46825.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Fox/services/trackbacks/46825.html</trackback:ping><description><![CDATA[<p>转自：<a href="/Bugs/archive/2008/04/01/45903.html">http://www.cppblog.com/Bugs/archive/2008/04/01/45903.html</a></p>
		<p>基本要求：<br />1、有软件工程思想,熟悉面向对象思想。<br />2、有良好的编码风格和文档编写习惯<br />3、熟悉C++语言,了解STL<br />4、了解多线程程序设计技术<br />5、热爱游戏、有游戏开发经验者优先<br />6、有团队开发精神优先<br /><br />客户端程序员：<br />1、了解DirectX编程技术，有良好的数学、各种算法基础优先<br />2、有图形开发经验者优先<br />3、熟悉UI编程技术优先<br />4、熟悉引擎开发者优先<br /><br />服务器端程序员：<br />1、熟悉通信以及网络安全技术. 熟悉TCP/IP协议及相关编程技术优先<br />2、有关系数据库编程及概念经验（MySql、PostgreSQL、MS Sql）<br />3、了解分布式服务器架构技术优先<br />4、了解Lua、Python有游戏脚本系统设计经验优先<br /><br />办公地点：成都<br />有意向的朋友跟贴或发简历到<a href="mailto:zhouhejian@snda.com">zhouhejian@snda.com</a></p><img src ="http://www.cppblog.com/Fox/aggbug/46825.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Fox/" target="_blank">Fox</a> 2008-04-11 12:41 <a href="http://www.cppblog.com/Fox/archive/2008/04/11/invite_job.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>整理一下，准备归位</title><link>http://www.cppblog.com/Fox/archive/2008/02/29/trivial_thing_before_return.html</link><dc:creator>Fox</dc:creator><author>Fox</author><pubDate>Fri, 29 Feb 2008 10:11:00 GMT</pubDate><guid>http://www.cppblog.com/Fox/archive/2008/02/29/trivial_thing_before_return.html</guid><wfw:comment>http://www.cppblog.com/Fox/comments/43480.html</wfw:comment><comments>http://www.cppblog.com/Fox/archive/2008/02/29/trivial_thing_before_return.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Fox/comments/commentRss/43480.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Fox/services/trackbacks/43480.html</trackback:ping><description><![CDATA[<p>Author: Fox </p>
		<p>
				<span style="COLOR: green">//-----------------------------------------------------------------------------------------------------<br />因为要归位回原公司了，手上便没有什么工作了，难得清闲下来，就整理一些很杂的东西，准备下周回去了<span style="FONT-FAMILY: Wingdings">J</span>。<br />//----------------------------------------------------------------------------------------------------- </span>
		</p>
		<p>零、关于此文 </p>
		<p>下面的东西很杂，但并非没有关联。 </p>
		<p>一、关于《疯狂的程序员》 </p>
		<p>有些搞程序的人有个癖性：自负偏激，主观绝对。<span style="COLOR: green"></span></p>
		<p>早就看过一点儿，因为时间，没有怎么关注，下午就找来CSDN的blog上面连载的<a href="http://blog.csdn.net/hitetoshi">《疯狂的程序员》</a>来看。<span style="COLOR: green"></span></p>
		<p>正如很多人所评论的，在绝影身上，大家都找到了自己当初学程序的影子。哪个稍有点技术的程序没有点自负的心理呢？绝影的性格很偏激，人很要面子，想法很阴暗，对世界的认识很主观、很绝对。 </p>
		<p>可惜的是，这个东西，只能当作小说看，其他不做评论…… </p>
		<p>二、关于Windows的环境变量 </p>
		<p>有些搞程序的人有个癖性：能用键盘的坚决不用鼠标。 </p>
		<p>查看帮助，按F1，重命名，按F2，搜索，按F3，输入地址，按F4，刷新，按F5…… </p>
		<p>桌面上很干净，没有"我的电脑"的图标，都用WinKey+E。没有IE的图标，都用WinKey+R，输入iexplore，回车…… </p>
		<p>快速启动里面没有"显示桌面"的图标，都用WinKey+D，或者WinKey+M，没有Outlook的图标，都用WinKey+R，输入outlook，回车，Word就输入winword，记事本就输入notepad…… </p>
		<p>打开大多程序，不用鼠标到处点击，都是"运行"里面输入命令行替代了。除了Windows默认的这些，自己常用的其他软件怎么办呢？Windows有个环境变量。下面我给大家show一下，怎么不用鼠标，完成自定义环境变量，实现命令打开任一软件<span style="FONT-FAMILY: Wingdings">J</span>。 </p>
		<p>1、WinKey+E，打开"我的电脑"； </p>
		<p>2、Alt+Enter，打开其"属性"； </p>
		<p>3、方向键，选择"高级"； </p>
		<p>4、Alt+N，打开"环境变量"； </p>
		<p>5、Tab键，选择"系统变量"； </p>
		<p>6、方向键，选择"Path"； </p>
		<p>7、Alt+I，打开"编辑"； </p>
		<p>8、End键，移动到最后； </p>
		<p>9、输入";targetpath"；* </p>
		<p>10、Tab键，选择"确定"，回车，Tab键，选择"确定"，回车； </p>
		<p>11、WinKey+R，打开"运行"； </p>
		<p>12、输入"softname"，回车；* </p>
		<p>13、Over。 </p>
		<p>
				<span style="COLOR: green">//-----------------------------------------------------------------------------------------------------<br />其中，targetpath为soft所在文件夹绝对路径，softname为软件对应的exe文件名（.exe可省略）……<br />//----------------------------------------------------------------------------------------------------- </span>
		</p><img src ="http://www.cppblog.com/Fox/aggbug/43480.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Fox/" target="_blank">Fox</a> 2008-02-29 18:11 <a href="http://www.cppblog.com/Fox/archive/2008/02/29/trivial_thing_before_return.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>