<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_飞扬天下</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/5363/rss</id><updated>2011-12-26T05:53:11Z</updated><author><name>至尊王者</name><uri>http://www.cnblogs.com/flying_bat/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/flying_bat/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/5363/rss"/><entry><id>http://www.cnblogs.com/flying_bat/archive/2011/11/03/2234826.html</id><title type="text">我的网站,求友情链接</title><summary type="text">http://www.iwinphone7.com/Window Phone, Window Phone 7, Microsoft, Zune.XAP欢迎大家光临,互链请联系QQ:80531448,MSN:rise.worlds@live.com.</summary><published>2011-11-03T09:40:00Z</published><updated>2011-11-03T09:40:00Z</updated><author><name>至尊王者</name><uri>http://www.cnblogs.com/flying_bat/</uri></author><link rel="alternate" href="http://www.cnblogs.com/flying_bat/archive/2011/11/03/2234826.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/flying_bat/archive/2011/11/03/2234826.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.iwinphone7.com/"&gt;http://www.iwinphone7.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Window Phone, Window Phone 7, Microsoft, Zune.&lt;/p&gt;&#xD;
&lt;p&gt;XAP&lt;/p&gt;&#xD;
&lt;p&gt;欢迎大家光临,互链请联系QQ:80531448,MSN:rise.worlds@live.com.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/flying_bat/aggbug/2234826.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/flying_bat/archive/2011/11/03/2234826.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/flying_bat/archive/2011/06/14/2080755.html</id><title type="text">成长之痛</title><summary type="text">10号终于决定离开公司了，在这地方待了近四年的时间，历经项目开发的其中各种滋味。在四年的时间中，搞不清楚自己到底成长多少，自己的器量有多大。最后这段时间经常有公司的同事们用各种办法挽留，然而到最后自己也没能坚持下来。成长过程中，要经的住诱惑，改变是必须的，但是不可避免地伴随着成长之痛。自己还需要得到更多的磨练，更多的机会，才能成器。万城不是一个适合做开发做团队做互联网的地方，骨子里少互联网的团队那种该有的精神和目标，过多的是想依小求大，相互牵制，很多事情做的事得其反。现在，对于有些事情、有些人也无心去评价，一切自有时间来证明。而所有曾经在万城为同一个目标努力过的朋友，将成为我生命中不可磨灭的记</summary><published>2011-06-14T08:30:00Z</published><updated>2011-06-14T08:30:00Z</updated><author><name>至尊王者</name><uri>http://www.cnblogs.com/flying_bat/</uri></author><link rel="alternate" href="http://www.cnblogs.com/flying_bat/archive/2011/06/14/2080755.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/flying_bat/archive/2011/06/14/2080755.html"/><content type="html">&lt;p&gt;10号终于决定离开公司了，在这地方待了近四年的时间，历经项目开发的其中各种滋味。&lt;/p&gt;&#xD;
&lt;p&gt;在四年的时间中，搞不清楚自己到底成长多少，自己的器量有多大。&lt;/p&gt;&#xD;
&lt;p&gt;最后这段时间经常有公司的同事们用各种办法挽留，然而到最后自己也没能坚持下来。&lt;/p&gt;&#xD;
&lt;p&gt;成长过程中，要经的住诱惑，改变是必须的，但是不可避免地伴随着成长之痛。&lt;/p&gt;&#xD;
&lt;p&gt;自己还需要得到更多的磨练，更多的机会，才能成器。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;万城不是一个适合做开发做团队做互联网的地方，&lt;/p&gt;&#xD;
&lt;p&gt;骨子里少互联网的团队那种该有的精神和目标，过多的是想依小求大，相互牵制，很多事情做的事得其反。&lt;br /&gt;现在，对于有些事情、有些人也无心去评价，一切自有时间来证明。&lt;br /&gt;而所有曾经在万城为同一个目标努力过的朋友，将成为我生命中不可磨灭的记忆，同时祝福所有人。&lt;br /&gt;希望有一天可以组建自己的互联网团队，并取的一席之地。&lt;/p&gt;&#xD;
&lt;p&gt;也希望万城的复仇项目最终可以浴火重生，其它的项目可以进展顺利。&lt;/p&gt;&#xD;
&lt;p&gt;其时我更好看好其它项目，如果不是在这个环境下的话。&lt;/p&gt;&#xD;
&#xD;
历经磨难方可救赎，感受悲苦便知甘甜。圣洁之火源于幽暗，涅磐之后得以重生。&lt;img src="http://www.cnblogs.com/flying_bat/aggbug/2080755.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/flying_bat/archive/2011/06/14/2080755.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/flying_bat/archive/2011/02/20/1959161.html</id><title type="text">审核游戏功能</title><summary type="text">1.什么是游戏功能 游戏功能即game feature，一个游戏的各个子系统。如法术系统，状态系统，天赋系统，包裹系统，P2P交易系统，修理系统，附魔系统等等。 游戏功能由策划进行设计，然后交给美术和程序执行。 2.什么是审核 审核是一个功能设计的过滤器，这种过滤针对设计的可执行性，而非功能本身。 3.为什么要审核 策划们不明白每个功能的执行优先级。程度：有时候。危害：功能做出来了，但是暂时成为了...</summary><published>2011-02-20T09:45:00Z</published><updated>2011-02-20T09:45:00Z</updated><author><name>至尊王者</name><uri>http://www.cnblogs.com/flying_bat/</uri></author><link rel="alternate" href="http://www.cnblogs.com/flying_bat/archive/2011/02/20/1959161.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/flying_bat/archive/2011/02/20/1959161.html"/><content type="html">&lt;p&gt;1.什么是游戏功能   &lt;br /&gt;游戏功能即game feature，一个游戏的各个子系统。如法术系统，状态系统，天赋系统，包裹系统，P2P交易系统，修理系统，附魔系统等等。    &lt;br /&gt;游戏功能由策划进行设计，然后交给美术和程序执行。    &lt;br /&gt;2.什么是审核    &lt;br /&gt;&lt;img border="0" src="http://www.cppblog.com/images/cppblog_com/darkdestiny/a.jpg" /&gt;    &lt;br /&gt;审核是一个功能设计的过滤器，这种过滤针对设计的可执行性，而非功能本身。    &lt;br /&gt;3.为什么要审核    &lt;br /&gt;策划们不明白每个功能的执行优先级。程度：有时候。危害：功能做出来了，但是暂时成为了摆设。    &lt;br /&gt;策划们的设计文档是不够详细，不够完整，甚至有些细节还没有想清楚或者在自己的部门内达成一直认识的。程度：经常。危害：这种设计就是反复被变更和修改的那种设计，程序也会因此越改越烂，并且功能要拖拖拉拉好几个里程碑。    &lt;br /&gt;国内的公司都不怎么大，公司的法人会出来用独裁手段让大家执行某个功能。程度：偶尔。危害：说不准。    &lt;br /&gt;程序是食物链上的最后一环，如果前面没有把好关，那么后面就要拉肚子生病。    &lt;br /&gt;审核能过滤掉目标和受众不明确的功能。    &lt;br /&gt;审核能过滤掉设计不完整的功能。    &lt;br /&gt;审核能判断出功能的执行优先级。    &lt;br /&gt;4.审核的基本原则    &lt;br /&gt;因为我是一个程序，我也信任自己的策划同事，所以最基本的原则是，不对功能在设计上做任何评论和质疑。    &lt;br /&gt;审核只关心功能的目标，设计的信息完整性，和由此引申出来的可执行性。    &lt;br /&gt;审核没有通过并不会一棒子打死功能和设计，只要功能和设计能通过审核，就能被执行。    &lt;br /&gt;5.怎样审核    &lt;br /&gt;&amp;#160;&amp;#160; 5.1规则集合    &lt;br /&gt;规则集合是一组标准，只有一个功能的设计完全通过这组标准的时候，才能加入执行队列。    &lt;br /&gt;这组规则不是一个人建立的，而是所有有责任心的同事提出的意见中提炼出来了。    &lt;br /&gt;我先大概提出这么一些：    &lt;br /&gt;*功能必须为玩家的一个以上的生命期提供主要服务（新手期，兴奋期，参与沉迷期）    &lt;br /&gt;*功能必须针对一种类型以上的玩家（探索型，成就型，杀手型，社交型）    &lt;br /&gt;*功能支持零个以上的其他功能。    &lt;br /&gt;*功能依赖的其他功能必须已经实现。    &lt;br /&gt;*功能设计可以通过程序正常表现。    &lt;br /&gt;*功能设计中必须提供详细的美术需求。    &lt;br /&gt;*功能设计中的基本面必须完整。    &lt;br /&gt;*功能设计中必须拟定需要用到的数据表格。    &lt;br /&gt;&amp;#160;&amp;#160; 5.2审核小组    &lt;br /&gt;审核小组从同事中找5个人左右，各个部门都必须占有1个以上的席位。每个组员仅负责其中的几条规则，各个组员所负责的规则之间不能有交集。    &lt;br /&gt;每个组员用自己负责的规则对功能和设计做出通过和不通过的判断，并对不通过的的判断给出具体理由。    &lt;br /&gt;每个不通过的判断都必须得到组内3人以上（含3人）的认可。    &lt;br /&gt;&amp;#160;&amp;#160; 5.3审核过程    &lt;br /&gt;策划完成功能设计之后，必须提供一份针对审核规则的设计说明文档，以便于审核小组能迅速的判断出功能的设计是否能执行。    &lt;br /&gt;审核小组全员通过功能设计后，通过审核规则中的算法规则（我没有提供，因为这要考虑很多方面）计算功能的执行优先级，加入功能队列，由PM进行工作分配。    &lt;br /&gt;没能通过的功能设计，将包含一份详细的犯规细节清单还给策划。然后策划进行工作避开这些犯规后，可以再次提交审核。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/flying_bat/aggbug/1959161.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/flying_bat/archive/2011/02/20/1959161.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/flying_bat/archive/2010/11/05/1869587.html</id><title type="text">限时免费抢！正版卡巴斯基安全部队2011激活码1年</title><summary type="text">&amp;#160; 最近互联网真是硝烟四起啊！趁着360与腾讯斗得你死我活的时候，卡巴斯基借机推出了“全民脱险”活动，免费向所有人赠送卡巴斯基安全部队2011正版一年激活码。鹬蚌相争，渔翁得利，估计卡巴是想将360流失的用户收拢了吧。不管怎样，对用户来说，能免费使用原本售价近200多元的杀毒软件，还是好事一件！  卡巴斯基作为老牌的杀毒软件大家都很熟悉了，这次安全部队2011版在功能和优化上都有了很大的...</summary><published>2010-11-05T01:15:00Z</published><updated>2010-11-05T01:15:00Z</updated><author><name>至尊王者</name><uri>http://www.cnblogs.com/flying_bat/</uri></author><link rel="alternate" href="http://www.cnblogs.com/flying_bat/archive/2010/11/05/1869587.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/flying_bat/archive/2010/11/05/1869587.html"/><content type="html">&lt;p&gt;&amp;#160; 最近互联网真是硝烟四起啊！趁着360与腾讯斗得你死我活的时候，卡巴斯基借机推出了“全民脱险”活动，免费向所有人赠送卡巴斯基安全部队2011正版一年激活码。鹬蚌相争，渔翁得利，估计卡巴是想将360流失的用户收拢了吧。不管怎样，对用户来说，能免费使用原本售价近200多元的杀毒软件，还是好事一件！&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;卡巴斯基&lt;/strong&gt;作为老牌的杀毒软件大家都很熟悉了，这次安全部队2011版在功能和优化上都有了很大的提高，而且加强了对网银、网游的安全监管。性能方面，这次官方还直接宣传说“卡巴斯基再也不卡了！”，可见他们对这个版本的性能优化挺有信心的吧，喜欢卡巴的同学别浪费了这次免费的机会哟……&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;卡巴斯基安全部队2011安全堡垒功能&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 新版的卡巴斯基安全部队2011拥有非常多的改进，产品设计更加成熟，细节方面更加完善。区域过滤、程序管控、省电模式和增强版家长管控都为这款产品增色许多。反正大家对卡巴斯基其实都很熟悉了，一般的功能我就也不必费文字来描述了。这次2011相比以前，我认为最大特色就是加入了一个叫做“安全堡垒”的实用功能，就这一点就让我有使用它的冲动了。&lt;/p&gt;  &lt;p&gt;&lt;img title="卡巴斯基安全部队2011" border="0" alt="卡巴斯基安全部队2011" src="http://img.iplaysoft.com/wp-content/uploads/2010/4a08fdb59547_DDF3/k2.jpg" width="552" height="410" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 安全堡垒类似于“影子系统”，为浏览器和其它应用程序提供了一个受保护的虚拟环境，以更好地保护系统和隐私数据安全。安全堡垒共分为三个小功能：安全桌面、安全浏览器和安全键盘，通过这三个功能的配合使用，可以非常有效地防止用户隐私数据被盗，系统被恶意修改等问题。&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 和影子系统类似，你可以在“安全桌面”里运行一些危险的程序或测试未知安全性的程序，不会对你的真实系统产生影响；同理，你可以在“安全浏览器”里测试访问危险的网站而不怕真实的系统受到任何影响了；而“安全键盘”就是能保护你在网银、或任何程序里输入账号密码的信息不被木马偷听或盗取。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;写在后面：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 总的来说，《卡巴斯基安全部队2011》作为卡巴斯基公司本年度最重磅级的产品，能免费提供1年的使用激活码，其实还算是比较厚道的了。喜欢卡巴的朋友要尽快抢了，因为这个免费活动到2010年12月3日就会结束。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;申请卡巴斯基免费1年正版激活码：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;活动时间：&lt;font color="#ff0000"&gt;2010年11月4日至2010年12月3日      &lt;br /&gt;&lt;/font&gt;&lt;a href="http://song.kaba365.com/"&gt;免费申请地址&lt;/a&gt;：&lt;a title="http://song.kaba365.com/" href="http://song.kaba365.com/"&gt;http://song.kaba365.com/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/flying_bat/aggbug/1869587.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/flying_bat/archive/2010/11/05/1869587.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/flying_bat/archive/2010/11/04/1868705.html</id><title type="text">360与QQ共存方法</title><summary type="text">狗咬狗，害了用户，但两个软件都有方便之处，所以共享的方法如下： XP系统，在C:\Documents and Settings\你的用户名\Application Data\Tencent\QQ下，把SafeBase这个文件夹的权限设置为完全拒绝。 Vista\WIN7系统，在C:\Users\你的用户名\AppData\Roaming\Tencent\QQ下，把SafeBase这个文件夹的权限设...</summary><published>2010-11-04T01:09:00Z</published><updated>2010-11-04T01:09:00Z</updated><author><name>至尊王者</name><uri>http://www.cnblogs.com/flying_bat/</uri></author><link rel="alternate" href="http://www.cnblogs.com/flying_bat/archive/2010/11/04/1868705.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/flying_bat/archive/2010/11/04/1868705.html"/><content type="html">&lt;p&gt;狗咬狗，害了用户，但两个软件都有方便之处，所以共享的方法如下：&lt;a name="entrymore"&gt;&lt;/a&gt;    &lt;br /&gt;XP系统，在C:\Documents and Settings\你的用户名\Application Data\Tencent\QQ下，把SafeBase这个文件夹的权限设置为完全拒绝。    &lt;br /&gt;Vista\WIN7系统，在C:\Users\你的用户名\AppData\Roaming\Tencent\QQ下，把SafeBase这个文件夹的权限设置为完全拒绝。    &lt;br /&gt;TM版的，只是把文件夹QQ改为TM下的文件夹SafeBase权限为禁止。    &lt;br /&gt;这个safebase文件夹中显示的所有用户组，全部设为拒绝即可。    &lt;br /&gt;xp中，如果文件的选项卡中没安全选项，则，打开我的电脑，工具栏，文件夹选项，查看，在查看中把“使用简单文件共享（推荐）”勾去掉，就可以看到文件夹属性的“安全”选项卡。    &lt;br /&gt;-------------    &lt;br /&gt;此方法已测试。可行。    &lt;br /&gt;-------------    &lt;br /&gt;运行了五个小时之后的截图。二者均更新到最新版。    &lt;br /&gt;&lt;a href="http://cince.try2.org/attachment.php?fid=557"&gt;&lt;img title="Open in new window" border="0" alt="Open in new window" src="http://cince.try2.org/attachment.php?fid=557" width="500" /&gt;&lt;/a&gt;    &lt;br /&gt;新增一张图:刚才刚则截的。    &lt;br /&gt;&lt;a href="http://cince.try2.org/attachment.php?fid=558"&gt;&lt;img title="Open in new window" border="0" alt="Open in new window" src="http://cince.try2.org/attachment.php?fid=558" width="500" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/flying_bat/aggbug/1868705.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/flying_bat/archive/2010/11/04/1868705.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/flying_bat/archive/2010/10/27/1862556.html</id><title type="text">微软Windows 7 SP1 RC 官方已经提供下载</title><summary type="text">据了解，微软对外发布的Windows 7 SP1 RC包括32位和64位两个版本，64位版本的体积大小为865.4MB，32位版本的体积大小为514.7MB。微软表示，Windows 7 SP1将会包括Remote FX和Windows 7 RTM的累积更新与安全修复补丁。RC候选版是最新的公开测试版本，这也就意味着距离正式的RTM版不远了。正如之前微软的声明，SP1中新增的功能只有与Windows Server 2008 R2相关的虚拟化技术：RemoteFX、动态内存（Dynamic Memory）。这些功能将帮助消费者通过虚拟桌面基础架构（Virtual Desktop Infrastructure，VDI）来部署Windows，并且获得可扩展和更加丰富的用户体验。</summary><published>2010-10-27T05:44:00Z</published><updated>2010-10-27T05:44:00Z</updated><author><name>至尊王者</name><uri>http://www.cnblogs.com/flying_bat/</uri></author><link rel="alternate" href="http://www.cnblogs.com/flying_bat/archive/2010/10/27/1862556.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/flying_bat/archive/2010/10/27/1862556.html"/><content type="html">&lt;p&gt;据国外媒体报道，来自国外媒体Neowin网站的消息称，目前，微软已经官方对外发布Windows 7 SP1的RC版本，版本号为windows6.1-KB976932。近段时间，Windows 7 SP1 RC版本的builds不断被泄露到网络中，可能就是由于这个原因微软才不得已提前对外Windows 7 SP1 RC版。&lt;/p&gt;&#xD;
&lt;p&gt;据了解，微软对外发布的Windows 7 SP1 RC包括32位和64位两个版本，64位版本的体积大小为865.4MB，32位版本的体积大小为514.7MB。微软表示，Windows 7 SP1将会包括Remote FX和Windows 7 RTM的累积更新与安全修复补丁。&lt;br /&gt;&lt;br /&gt;通过安装Windows 7 SP1，用户将能够更加方便、快速地安装以往微软针对Windows 7 RTM发布的安全补丁和功能增强。&lt;br /&gt;&lt;br /&gt;微软表示，所有运行正版Windows 7 RTM操作系统的用户都能够免费安装SP1。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;RC候选版是最新的公开测试版本，这也就意味着距离正式的RTM版不远了。正如之前微软的声明，&lt;strong&gt;SP1中新增的&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/span&gt;只有与Windows Server 2008 R2相关的虚拟化&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;技术&lt;/strong&gt;&lt;/span&gt;：RemoteFX、动态内存（Dynamic Memory）。&lt;/strong&gt;这些功能将帮助消费者通过虚拟桌面基础架构（Virtual Desktop Infrastructure，VDI）来部署Windows，并且获得可扩展和更加丰富的&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;用户&lt;/strong&gt;&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;体验&lt;/strong&gt;&lt;/span&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;Windows 7 SP1则能帮助PC机利用上述基于&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;服务&lt;/strong&gt;&lt;/span&gt;器的功能，从而为终端用户提供更丰富的VDI体验。此外，&lt;strong&gt;SP1并没有新增专门针对Windows 7的功能&lt;/strong&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;最低&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;系统&lt;/strong&gt;&lt;/span&gt;要求：&lt;/p&gt;&#xD;
&lt;p&gt;&amp;mdash; 1 GHz以上32位或64位&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;处理器&lt;/strong&gt;&lt;/span&gt;；&lt;/p&gt;&#xD;
&lt;p&gt;&amp;mdash; 1GB RAM（32位）/2GB RAM（64位）；&lt;/p&gt;&#xD;
&lt;p&gt;&amp;mdash; 16GB可用磁盘空间（32位）/20GB可用磁盘空间（64位）；&lt;/p&gt;&#xD;
&lt;p&gt;&amp;mdash; DirectX 9图形处理器，WDDM 1.0或更高版本&lt;span style="text-decoration: underline;"&gt;&lt;strong&gt;驱动&lt;/strong&gt;&lt;/span&gt;；&lt;/p&gt;&#xD;
&lt;p&gt;&amp;mdash; 兼容DVD；&lt;/p&gt;&#xD;
&lt;p&gt;Windows 7/Server 2008 R2 SP1 RC候选版下载页面（需注册）：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a  href="http://technet.microsoft.com/en-us/evalcenter/ff183870.aspx" target="_blank"&gt;&lt;span style="color: #0000ff;"&gt;http://technet.microsoft.com/en-us/evalcenter/ff183870.aspx&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;用户可以通过以下链接去下载32位或64位的Windows 7 SP1 RC版本：&lt;br /&gt;&lt;a href="http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X86.exe" target="_blank"&gt;http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X86.exe&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X64.exe" target="_blank"&gt;http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/windows6.1-KB976932-X64.exe&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/7601.17105.100929-1730-3_Update_Sp_Wave1-RC1SP1.1_DVD.iso"&gt;http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0D4461357/7601.17105.100929-1730-3_Update_Sp_Wave1-RC1SP1.1_DVD.iso&amp;nbsp;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/flying_bat/aggbug/1862556.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/flying_bat/archive/2010/10/27/1862556.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/flying_bat/archive/2010/10/19/1855633.html</id><title type="text">visual studio 中&amp;rdquo;error PRJ0003 : 生成 cmd.exe 时出错&amp;rdquo;</title><summary type="text">刚装完VS2005，建了个Win32工程，一编译就出现 “项目 : error PRJ0003 : 生成“cmd.exe”时出错。”。  解决方案：工具—&amp;gt;选项—&amp;gt;项目和解决方案—&amp;gt;VC++目录，在可执行文件栏中加上如下路径：  $(SystemRoot)\System32 $(SystemRoot) $(SystemRoot)\System32\wbem 现在运行成功了，输出内...</summary><published>2010-10-19T08:18:00Z</published><updated>2010-10-19T08:18:00Z</updated><author><name>至尊王者</name><uri>http://www.cnblogs.com/flying_bat/</uri></author><link rel="alternate" href="http://www.cnblogs.com/flying_bat/archive/2010/10/19/1855633.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/flying_bat/archive/2010/10/19/1855633.html"/><content type="html">&lt;p&gt;刚装完VS2005，建了个Win32工程，一编译就出现 “项目 : error PRJ0003 : 生成“cmd.exe”时出错。”。&lt;/p&gt;  &lt;p&gt;解决方案：工具—&amp;gt;选项—&amp;gt;项目和解决方案—&amp;gt;VC++目录，在可执行文件栏中加上如下路径：&lt;/p&gt;  &lt;p&gt;$(SystemRoot)\System32   &lt;br /&gt;$(SystemRoot)    &lt;br /&gt;$(SystemRoot)\System32\wbem &lt;/p&gt;  &lt;p&gt;现在运行成功了，输出内容：&lt;/p&gt;  &lt;p&gt;------ 已启动生成: 项目: Game, 配置: Debug Win32 ------&lt;/p&gt;  &lt;p&gt;正在嵌入清单...&lt;/p&gt;  &lt;p&gt;生成日志保存在“file://e:\Visual Studio 2005\Projects\Game\Game\Debug\BuildLog.htm”&lt;/p&gt;  &lt;p&gt;Game - 0 个错误，个警告&lt;/p&gt;  &lt;p&gt;========== 生成: 成功1 个，失败0 个，最新0 个，跳过0 个==========&lt;/p&gt;&lt;img src="http://www.cnblogs.com/flying_bat/aggbug/1855633.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/flying_bat/archive/2010/10/19/1855633.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/flying_bat/archive/2010/08/18/1802011.html</id><title type="text">Windows Live Essentials Wave 4 Beta 2 发布，附完整安装包下载</title><summary type="text">微软今天宣布了 Windows Live Essentials Wave 4 的 Beta Refresh 版，也就是上次预告的 Beta 2。感谢 Damaster，新版 Essentials 安装包已经可以在下面的地址下载。  Windows Live Essentials Wave 4 Beta 2 更新包括：新增 Facebook Chat 的支持、Windows Live 照片库、Wri...</summary><published>2010-08-18T01:05:00Z</published><updated>2010-08-18T01:05:00Z</updated><author><name>至尊王者</name><uri>http://www.cnblogs.com/flying_bat/</uri></author><link rel="alternate" href="http://www.cnblogs.com/flying_bat/archive/2010/08/18/1802011.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/flying_bat/archive/2010/08/18/1802011.html"/><content type="html">&lt;p&gt;微软今天宣布了 Windows Live Essentials Wave 4 的 Beta Refresh 版，也就是上次预告的 Beta 2。感谢 Damaster，新版 Essentials 安装包已经可以在下面的地址下载。&lt;/p&gt;  &lt;p&gt;Windows Live Essentials Wave 4 Beta 2 更新包括：新增 Facebook Chat 的支持、Windows Live 照片库、Writer 和影音制作的一些改进和增强。我会在新文章中介绍，先下载安装吧。&lt;/p&gt;  &lt;p&gt;对了，完整安装包共 151 MB，版本号 15.4.3001.0809：&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;英文版: &lt;a href="http://wl.dlservice.microsoft.com/download/3/7/8/378567CC-DCDC-47EC-A811-4A063AB3DDA8/en/wlsetup-web.exe"&gt;Web 安装包&lt;/a&gt; – &lt;a href="http://wl.dlservice.microsoft.com/download/2/6/9/269979BF-69FA-470F-87BE-7B72EF90720F/en/wlsetup-all.exe"&gt;完整安装包&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;简体中文版: &lt;a href="http://wl.dlservice.microsoft.com/download/4/7/6/476BB072-06DA-445F-9371-8F41C827F8B6/zh-cn/wlsetup-web.exe"&gt;Web 安装包&lt;/a&gt; – &lt;a href="http://wl.dlservice.microsoft.com/download/2/6/9/269979BF-69FA-470F-87BE-7B72EF90720F/zh-cn/wlsetup-all.exe"&gt;完整安装包&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;法语版: &lt;a href="http://wl.dlservice.microsoft.com/download/1/B/9/1B9F8F50-64B5-48D8-A12E-63096B5A6890/fr/wlsetup-web.exe"&gt;Web 安装包&lt;/a&gt; – &lt;a href="http://wl.dlservice.microsoft.com/download/2/6/9/269979BF-69FA-470F-87BE-7B72EF90720F/fr/wlsetup-all.exe"&gt;完整安装包&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;德语版: &lt;a href="http://wl.dlservice.microsoft.com/download/3/2/D/32D37A90-EC05-407C-B6BD-3383D21A2254/de/wlsetup-web.exe"&gt;Web 安装包&lt;/a&gt; – &lt;a href="http://wl.dlservice.microsoft.com/download/2/6/9/269979BF-69FA-470F-87BE-7B72EF90720F/de/wlsetup-all.exe"&gt;完整安装包&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;荷兰语版: &lt;a href="http://wl.dlservice.microsoft.com/download/3/F/9/3F92E3C4-A732-4BB5-B3C5-C28CAED63880/nl/wlsetup-web.exe"&gt;Web 安装包&lt;/a&gt; – &lt;a href="http://wl.dlservice.microsoft.com/download/2/6/9/269979BF-69FA-470F-87BE-7B72EF90720F/nl/wlsetup-all.exe"&gt;完整安装包&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;葡萄牙语版（巴西）: &lt;a href="http://wl.dlservice.microsoft.com/download/0/A/8/0A89F6A2-61B3-415A-B49C-522367F4C710/pt-br/wlsetup-web.exe"&gt;Web 安装包&lt;/a&gt;&lt;strike&gt;&lt;/strike&gt; – &lt;a href="http://wl.dlservice.microsoft.com/download/2/6/9/269979BF-69FA-470F-87BE-7B72EF90720F/pt-br/wlsetup-all.exe"&gt;完整安装包&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;西班牙语版: &lt;a href="http://wl.dlservice.microsoft.com/download/7/2/1/721E7524-2E45-473F-AA74-D7B61994BE30/es/wlsetup-web.exe"&gt;Web 安装包&lt;/a&gt; – &lt;a href="http://wl.dlservice.microsoft.com/download/2/6/9/269979BF-69FA-470F-87BE-7B72EF90720F/es/wlsetup-all.exe"&gt;完整安装包&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;日语版: &lt;a href="http://wl.dlservice.microsoft.com/download/C/D/E/CDE9FB6A-F3B8-48DD-A789-9D564BEAAD56/ja/wlsetup-web.exe"&gt;Web 安装包&lt;/a&gt; – &lt;a href="http://wl.dlservice.microsoft.com/download/2/6/9/269979BF-69FA-470F-87BE-7B72EF90720F/ja/wlsetup-all.exe"&gt;完整安装包&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[转载至]&lt;a href="http://livesino.net/archives/2876.live"&gt;http://livesino.net/archives/2876.live&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/flying_bat/aggbug/1802011.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/flying_bat/archive/2010/08/18/1802011.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/flying_bat/archive/2010/07/05/1771771.html</id><title type="text">Windows线程池Demo</title><summary type="text">#include &amp;lt;windows.h&amp;gt; #include &amp;lt;tchar.h&amp;gt; #include &amp;lt;stdio.h&amp;gt;  // // Thread pool wait callback function template // VOID &amp;#160;&amp;#160;&amp;#160; CALLBACK &amp;#160;&amp;#160;&amp;#160; MyWaitCallback( &amp;...</summary><published>2010-07-05T15:50:00Z</published><updated>2010-07-05T15:50:00Z</updated><author><name>至尊王者</name><uri>http://www.cnblogs.com/flying_bat/</uri></author><link rel="alternate" href="http://www.cnblogs.com/flying_bat/archive/2010/07/05/1771771.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/flying_bat/archive/2010/07/05/1771771.html"/><content type="html">&lt;p&gt;#include &amp;lt;windows.h&amp;gt;   &lt;br /&gt;#include &amp;lt;tchar.h&amp;gt;    &lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/p&gt;  &lt;p&gt;//   &lt;br /&gt;// Thread pool wait callback function template    &lt;br /&gt;//    &lt;br /&gt;VOID    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CALLBACK    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; MyWaitCallback(    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_CALLBACK_INSTANCE Instance,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PVOID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Parameter,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_WAIT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Wait,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TP_WAIT_RESULT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WaitResult    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; )    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Do something when the wait is over.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;MyWaitCallback: wait is over.\n&amp;quot;));    &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;//    &lt;br /&gt;// Thread pool timer callback function template    &lt;br /&gt;//    &lt;br /&gt;VOID    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CALLBACK    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; MyTimerCallback(    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_CALLBACK_INSTANCE Instance,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PVOID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Parameter,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_TIMER&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Timer    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; )    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Do something when the timer fires.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;MyTimerCallback: timer has fired.\n&amp;quot;));&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;//    &lt;br /&gt;// This is the thread pool work callback function.    &lt;br /&gt;// The callback demonstrates correct behavior when changing the     &lt;br /&gt;// state of the thread inside the callback function.    &lt;br /&gt;//    &lt;br /&gt;// Any changes to the thread state must be restored to original    &lt;br /&gt;// before exiting the callback routine.    &lt;br /&gt;//    &lt;br /&gt;VOID    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CALLBACK    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; MyWorkCallback(    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_CALLBACK_INSTANCE Instance,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PVOID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Parameter,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_WORK&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Work    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; )    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; BOOL bRet = FALSE;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DWORD dwPriorityOriginal = 0;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Record the original thread priority.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; dwPriorityOriginal = GetThreadPriority(GetCurrentThread());&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if (THREAD_PRIORITY_ERROR_RETURN == dwPriorityOriginal) {   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;GetThreadPriority failed.&amp;#160; LastError: %u\n&amp;quot;),    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetLastError());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Increase the priority of the thread pool thread.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; bRet = SetThreadPriority(GetCurrentThread(),    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; THREAD_PRIORITY_ABOVE_NORMAL);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if (FALSE == bRet) {   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;SetThreadPriority failed.&amp;#160; LastError: %u\n&amp;quot;),    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetLastError());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;MyWorkCallback: thread priority increased.\n&amp;quot;));&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Perform tasks at increased priority.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;MyWorkCallback: task performed at increased priority.\n&amp;quot;));&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Restore thread state by resetting the original priority.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; bRet = SetThreadPriority(GetCurrentThread(),    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; dwPriorityOriginal);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // If restore fails, maybe retry or throw an exception.&amp;#160; Otherwise,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // the thread will continue to execute other work items at increased    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // priority.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (FALSE == bRet) {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;Fatal Error! SetThreadPriority failed. LastError: %u\n&amp;quot;),    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetLastError());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;MyWorkCallback: thread priority restored.\n&amp;quot;));&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; return;   &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;VOID   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DemoCleanupPersistentWorkTimer()    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; BOOL bRet = FALSE;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_WORK work = NULL;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_TIMER timer = NULL;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_POOL pool = NULL;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_WORK_CALLBACK workcallback = MyWorkCallback;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_TIMER_CALLBACK timercallback = MyTimerCallback;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TP_CALLBACK_ENVIRON CallBackEnviron;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_CLEANUP_GROUP cleanupgroup = NULL;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FILETIME FileDueTime;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ULARGE_INTEGER ulDueTime;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UINT rollback = 0;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; InitializeThreadpoolEnvironment(&amp;amp;CallBackEnviron);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Create a custom, dedicated thread pool.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; pool = CreateThreadpool(NULL);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if (NULL == pool) {   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;CreateThreadpool failed. LastError: %u\n&amp;quot;),    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetLastError());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; goto main_cleanup;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; rollback = 1; // pool creation succeeded&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // The thread pool is made persistent simply by setting    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // both the minimum and maximum threads to 1.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SetThreadpoolThreadMaximum(pool, 1);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; bRet = SetThreadpoolThreadMinimum(pool, 1);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if (FALSE == bRet) {   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;SetThreadpoolThreadMinimum failed. LastError: %u\n&amp;quot;),    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetLastError());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; goto main_cleanup;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Create a cleanup group for this thread pool.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; cleanupgroup = CreateThreadpoolCleanupGroup();&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if (NULL == cleanupgroup) {   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;CreateThreadpoolCleanupGroup failed. LastError: %u\n&amp;quot;),     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetLastError());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; goto main_cleanup;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; rollback = 2;&amp;#160; // Cleanup group creation succeeded&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Associate the callback environment with our thread pool.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SetThreadpoolCallbackPool(&amp;amp;CallBackEnviron, pool);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Associate the cleanup group with our thread pool.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Objects created with the same callback environment    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // as the cleanup group become members of the cleanup group.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SetThreadpoolCallbackCleanupGroup(&amp;amp;CallBackEnviron,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cleanupgroup,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NULL);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Create work with the callback environment.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; work = CreateThreadpoolWork(workcallback,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NULL,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;CallBackEnviron);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if (NULL == work) {   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;CreateThreadpoolWork failed. LastError: %u\n&amp;quot;),    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetLastError());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; goto main_cleanup;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; rollback = 3;&amp;#160; // Creation of work succeeded&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Submit the work to the pool. Because this was a pre-allocated    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // work item (using CreateThreadpoolWork), it is guaranteed to execute.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SubmitThreadpoolWork(work);&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Create a timer with the same callback environment.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; timer = CreateThreadpoolTimer(timercallback,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NULL,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;CallBackEnviron);&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (NULL == timer) {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;CreateThreadpoolTimer failed. LastError: %u\n&amp;quot;),    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetLastError());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; goto main_cleanup;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; rollback = 4;&amp;#160; // Timer creation succeeded&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Set the timer to fire in one second.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ulDueTime.QuadPart = (LONGLONG) -(1 * 10 * 1000 * 1000);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FileDueTime.dwHighDateTime = ulDueTime.HighPart;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FileDueTime.dwLowDateTime&amp;#160; = ulDueTime.LowPart;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; SetThreadpoolTimer(timer,   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;FileDueTime,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Delay for the timer to be fired    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Sleep(1500);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Wait for all callbacks to finish.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // CloseThreadpoolCleanupGroupMembers also releases objects    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // that are members of the cleanup group, so it is not necessary     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // to call close functions on individual objects     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // after calling CloseThreadpoolCleanupGroupMembers.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CloseThreadpoolCleanupGroupMembers(cleanupgroup,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FALSE,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NULL);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Already cleaned up the work item with the    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // CloseThreadpoolCleanupGroupMembers, so set rollback to 2.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; rollback = 2;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; goto main_cleanup;&lt;/p&gt;  &lt;p&gt;main_cleanup:   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Clean up any individual pieces manually    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Notice the fall-through structure of the switch.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Clean up in reverse order.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; switch (rollback) {   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; case 4:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; case 3:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Clean up the cleanup group members.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CloseThreadpoolCleanupGroupMembers(cleanupgroup,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FALSE, NULL);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; case 2:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Clean up the cleanup group.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CloseThreadpoolCleanupGroup(cleanupgroup);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; case 1:   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Clean up the pool.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CloseThreadpool(pool);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; default:   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; break;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; return;   &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;VOID   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DemoNewRegisterWait()    &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_WAIT Wait = NULL;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; PTP_WAIT_CALLBACK waitcallback = MyWaitCallback;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; HANDLE hEvent = NULL;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UINT i = 0;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UINT rollback = 0;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Create an auto-reset event.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if (NULL == hEvent) {   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Error Handling    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; rollback = 1; // CreateEvent succeeded&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Wait = CreateThreadpoolWait(waitcallback,   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NULL,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NULL);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; if(NULL == Wait) {   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _tprintf(_T(&amp;quot;CreateThreadpoolWait failed. LastError: %u\n&amp;quot;),    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; GetLastError());    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; goto new_wait_cleanup;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; rollback = 2; // CreateThreadpoolWait succeeded&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Need to re-register the event with the wait object    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // each time before signaling the event to trigger the wait callback.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; for (i = 0; i &amp;lt; 5; i ++) {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SetThreadpoolWait(Wait,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hEvent,    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NULL);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SetEvent(hEvent);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Delay for the waiter thread to act if necessary.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Sleep(500);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Block here until the callback function is done executing.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WaitForThreadpoolWaitCallbacks(Wait, FALSE);   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;new_wait_cleanup:   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; switch (rollback) {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; case 2:    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Unregister the wait by setting the event to NULL.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SetThreadpoolWait(Wait, NULL, NULL);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Close the wait.   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CloseThreadpoolWait(Wait);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; case 1:   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Close the event.    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CloseHandle(hEvent);&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; default:   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; break;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return;    &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;int _tmain(int argc, _TCHAR* argv[])   &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DemoNewRegisterWait();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; DemoCleanupPersistentWorkTimer();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return 0;    &lt;br /&gt;}&lt;/p&gt;&lt;img src="http://www.cnblogs.com/flying_bat/aggbug/1771771.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/flying_bat/archive/2010/07/05/1771771.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/flying_bat/archive/2010/06/30/1768599.html</id><title type="text">Win32控制台清屏方法</title><summary type="text">最后觉得项目中的控制台不大好用，就添加了一些小功能，比如清屏；当然最简单的方法是调用系统自带的函数system(&amp;ldquo;cls&amp;rdquo;);，这里提供一个方法一样可以清屏（测试要比cls快一些）：</summary><published>2010-06-30T12:18:00Z</published><updated>2010-06-30T12:18:00Z</updated><author><name>至尊王者</name><uri>http://www.cnblogs.com/flying_bat/</uri></author><link rel="alternate" href="http://www.cnblogs.com/flying_bat/archive/2010/06/30/1768599.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/flying_bat/archive/2010/06/30/1768599.html"/><content type="html">&lt;p&gt;最后觉得项目中的控制台不大好用，就添加了一些小功能，比如清屏；当然最简单的方法是调用系统自带的函数system(&amp;ldquo;cls&amp;rdquo;);，这里提供一个方法一样可以清屏（测试要比cls快一些）：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;pre &gt;/* Standard error macro for reporting API errors */ &#xD;
 #define PERR(bSuccess, api){if(!(bSuccess)) printf("%s:Error %d from %s \ &#xD;
    on line %d\n", __FILE__, GetLastError(), api, __LINE__);}&#xD;
&#xD;
 void cls( HANDLE hConsole )&#xD;
 {&#xD;
    COORD coordScreen = { 0, 0 };    /* here's where we'll home the&#xD;
                                        cursor */ &#xD;
    BOOL bSuccess;&#xD;
    DWORD cCharsWritten;&#xD;
    CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */ &#xD;
    DWORD dwConSize;                 /* number of character cells in&#xD;
                                        the current buffer */ &#xD;
&#xD;
    /* get the number of character cells in the current buffer */ &#xD;
&#xD;
    bSuccess = GetConsoleScreenBufferInfo( hConsole, &amp;amp;csbi );&#xD;
    PERR( bSuccess, "GetConsoleScreenBufferInfo" );&#xD;
    dwConSize = csbi.dwSize.X * csbi.dwSize.Y;&#xD;
&#xD;
    /* fill the entire screen with blanks */ &#xD;
&#xD;
    bSuccess = FillConsoleOutputCharacter( hConsole, (TCHAR) ' ',&#xD;
       dwConSize, coordScreen, &amp;amp;cCharsWritten );&#xD;
    PERR( bSuccess, "FillConsoleOutputCharacter" );&#xD;
&#xD;
    /* get the current text attribute */ &#xD;
&#xD;
    bSuccess = GetConsoleScreenBufferInfo( hConsole, &amp;amp;csbi );&#xD;
    PERR( bSuccess, "ConsoleScreenBufferInfo" );&#xD;
&#xD;
    /* now set the buffer's attributes accordingly */ &#xD;
&#xD;
    bSuccess = FillConsoleOutputAttribute( hConsole, csbi.wAttributes,&#xD;
       dwConSize, coordScreen, &amp;amp;cCharsWritten );&#xD;
    PERR( bSuccess, "FillConsoleOutputAttribute" );&#xD;
&#xD;
    /* put the cursor at (0, 0) */ &#xD;
&#xD;
    bSuccess = SetConsoleCursorPosition( hConsole, coordScreen );&#xD;
    PERR( bSuccess, "SetConsoleCursorPosition" );&#xD;
    return;&#xD;
 }&#xD;
&#xD;
&lt;/pre&gt;&#xD;
&lt;/p&gt;&lt;img src="http://www.cnblogs.com/flying_bat/aggbug/1768599.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/flying_bat/archive/2010/06/30/1768599.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
