??xml version="1.0" encoding="utf-8" standalone="yes"?>人妻无码中文久久久久专区,99久久久国产精品免费无卡顿,国产精品亚洲美女久久久http://www.shnenglu.com/huyutian/articles/211535.html胡雨?/dc:creator>胡雨?/author>Tue, 11 Aug 2015 01:15:00 GMThttp://www.shnenglu.com/huyutian/articles/211535.htmlhttp://www.shnenglu.com/huyutian/comments/211535.htmlhttp://www.shnenglu.com/huyutian/articles/211535.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/211535.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/211535.html从网上摘取一些数据一条一条的攑օDataFrame中,当数据量较大Ӟ感觉q行特别慢。原来还以ؓ是DataFrameq算时比较耗时Q但是用二维list数组d数据Q然后一ơ性放入DataFrame中却会快很多。写了一个简单的试E序q行Ҏ?br />
 1 """
 2 Created on Sun Jul 12 16:29:57 2015
 3 @author: hbhuyt
 4 """
 5 
 6 import pandas as pd
 7 import random
 8 import timeit
 9 
10 
11 def func1():
12     aa = []
13     for x in xrange(200):
14         aa.append([random.randint(0, 1000) for r in xrange(5)])
15     pdaa = pd.DataFrame(aa)
16 
17 def func2():
18     pdbb = pd.DataFrame()
19     for y in xrange(200):
20         pdbb[y] = pd.Series([random.randint(0, 1000) for r in xrange(5)])
21 
22 def func3():
23     aa = {}
24     for x in xrange(200):
25         aa[str(x)] = random.randint(0, 1000)
26     psaa = pd.Series(aa)
27 
28 def func4():
29     psbb = pd.Series()
30     for y in xrange(200):
31         psbb[str(y)] = random.randint(0, 1000)
32 
33 
34 t1 = timeit.timeit(stmt =func1, number=1000)
35 t2 = timeit.timeit(stmt =func2, number=1000)
36 print t1, t2
37 t3 = timeit.timeit(stmt =func3, number=1000)
38 t4 = timeit.timeit(stmt =func4, number=1000)
39 print t3, t4
40 


试l果如下图:

可以看出DataFrame一行一行的填充数据是非常耗时的(与添加行的列数关pM大)Q最好是list或dict{标准容器填充数据后一ơ性导入到DataFrame中去?img src ="http://www.shnenglu.com/huyutian/aggbug/211535.html" width = "1" height = "1" />

]]>
关于python字典key值查找效率的试http://www.shnenglu.com/huyutian/articles/209772.html胡雨?/dc:creator>胡雨?/author>Mon, 09 Feb 2015 12:34:00 GMThttp://www.shnenglu.com/huyutian/articles/209772.htmlhttp://www.shnenglu.com/huyutian/comments/209772.htmlhttp://www.shnenglu.com/huyutian/articles/209772.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/209772.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/209772.html试环境Win 7 64位操作系l,python版本?.7.6
为防止cache对前后代码速度的媄响,先测试五ơ,两段代码交换后再试五次。测试结果可以看?in" 比has_key要稍E快一点点Q差别其实很,只是在大字典中时才能看出来?br />

#以下试比较has_key 和in查找字典元素的速度
#
试ҎQ测试五ơ,然后颠倒两D代码顺序再试五次
dict = {'Age': 7};
#先构造一?00000元素的大字典
i = 0
while (i<100000):
    key0 = '%05d' % i
    dict[key0] = i * i + 3 * i + 5
    i = i+1
#试has_key指o查找key?00000?/span>
i = 0
count = 0
t0 = time.time()
while(i < 100000):
    key0 = '%05d' % random.randint(0, 99999)
    if dict.has_key(key0):
        count += 1
    i+=1
t1 = time.time() - t0
print "spent %f seconds, found %d key." % (t1, count)
#试in指o查找key?00000?/span>
i = 0
count = 0
t0 = time.time()
while(i < 100000):
    key0 = '%05d' % random.randint(0, 99999)
    if key0 in dict:
        count += 1
    i+=1
t1 = time.time() - t0
print "spent %f seconds, found %d key." % (t1, count)


]]>从dll文g自动生成lib文ghttp://www.shnenglu.com/huyutian/articles/208620.html胡雨?/dc:creator>胡雨?/author>Sun, 19 Oct 2014 01:18:00 GMThttp://www.shnenglu.com/huyutian/articles/208620.htmlhttp://www.shnenglu.com/huyutian/comments/208620.htmlhttp://www.shnenglu.com/huyutian/articles/208620.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/208620.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/208620.html 原文地址Qhttp://www.codeproject.com/Articles/2752/How-to-create-lib-file-when-you-only-have-dll-and?msg=3572427#xx3572427xx
有时候你希望在自qC代码中调用别人的一个DLLQ但是又没有lib文gQ就会很ȝ。由dll文g逆向生成lib文g手工Ҏ|上已经有很多介l了Q自q度一下啊
q个是将整个手工Ҏ用makefile来自动完成。(btwQmakefile真的很强大,专业E序员都应该学一学)
makefile代码如下Q文本编辑器复制_脓后,另存为dll2lib.makefile
.SUFFIXES: .def .dll .lib
.def.lib:
    lib /machine:IX86 /nodefaultlib /def:$*.def & set retval=%? & del $*.exp > NUL & EXIT %retval
.dll.def:
    echo LIBRARY     $* > $*.def
    echo EXPORTS >> $*.def
    dumpbin /exports $*.dll | sed -n "s/      . 0. \([^ ]*\)/    \1/p" >> $*.def
 
somedllname.lib: somedllname.def

q行需要的环境和工P
sed.exe?span style="background-color: #ffffff;">以从 http://sourceforge.net/projects/unxutils/files/?/span>?/span>Q解包后在UnxUtils.zip\usr\local\wbin目录可以扑ֈ
q入visual studio 命o行环境,把你的dll文g?/span>名ؓsomedllname.dllQ记得要把sed.exe攑֜同一个目录下?/span>
q行 namke dll2lib.makefileQ自动生?/span>somedllname.lib?/span>somedllname.exp文g?br />
注意Q这U方法对于没有输出函数名的dll是无效的?br />
关于visual c++名字修饰的详l介l,看这?/div>
http://zh.wikipedia.org/wiki/Visual_C%2B%2B%E5%90%8D%E5%AD%97%E4%BF%AE%E9%A5%B0#.E7.B1.BB.E5.9E.8B.E7.9A.84.E7.BC.96.E7.A0.81.E8.A1.A8.E7.A4.BA


]]>python自学W记Q六Q?http://www.shnenglu.com/huyutian/articles/205763.html胡雨?/dc:creator>胡雨?/author>Sat, 15 Feb 2014 13:12:00 GMThttp://www.shnenglu.com/huyutian/articles/205763.htmlhttp://www.shnenglu.com/huyutian/comments/205763.htmlhttp://www.shnenglu.com/huyutian/articles/205763.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/205763.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/205763.htmlGAE计划dQCron服务
GAE的cron服务允许你配|在指定旉或固定间隔周期运行的计划d。例如,你可以每天发一份电子邮件报告,每隔10分钟更新~存数据{等。cron使用HTTP GETh调用一个URL。被cron调用的HTTPh可以q行长达10分钟Q如果期间没有发生另一个HTTPh。免费GAE应用可以有最?0个计划Q务,付费GAE应用可以?00个计划Q务?br />使用计划dQ你需要在GAE应用的根目录下徏立一个cron.yaml配置文gQ典型的配置文g如下
cron:
- description: daily summary job
  url: /tasks/summary
  schedule: every 24 hours
- description: monday morning mailout
  url: /mail/weekly
  schedule: every monday 09:00
  timezone: Australia/NSW
- description: new daily summary job
  url: /tasks/summary
  schedule: every 24 hours
  target: version-2
一个cron.yaml文g可以包含多个d。每个Q务必L一个URL|址和一个schedule。description,timezone和target是可选项。description显C在理控制台和开发服务器的管理界面?br />url域指定你的应用中一个由cron服务调用的地址?br />schedule格式可以有以下几U?br />
every 12 hours
every 5 minutes from 10:00 to 14:00
2nd,third mon,wed,thu of march 17:00
every monday 09:00
1st monday of sep,oct,nov 17:00
every day 00:00

上传crond
你可以用appcfg.py上传crondq查看有关crond的信息。?appcfg.py update"命o上传更新您的应用Qcron服务与cron.yaml的内Ҏ新。你可以用appcfg.py update_cron命o只更新cron配置Q而无需上传E序?br />删除所有crondQ只需要如下修改cron.yaml?br />
cron:
GAE关于cron官方文档参见q里?/div>

]]>python自学W记Q五Q?http://www.shnenglu.com/huyutian/articles/205735.html胡雨?/dc:creator>胡雨?/author>Sat, 15 Feb 2014 13:12:00 GMThttp://www.shnenglu.com/huyutian/articles/205735.htmlhttp://www.shnenglu.com/huyutian/comments/205735.htmlhttp://www.shnenglu.com/huyutian/articles/205735.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/205735.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/205735.html一、gae的部|需要python2.X。于是我的电脑中׃得不又安装了一个python2.7版。ؓ了保证gae讉K的是正确的python版本Q需要打开Google App Engine Launcher后,选择菜单Edit->Preference修改python解释器的路径?br />二、部|demo应用
选择菜单File->Add demo Application->python->guestbook可以创徏一个demo应用Q通过q行demo应用可以了解GAE的开发方法?br />可惜的是Q初ơ部|完guestbook后,q行会出错。打开Logs会提C错误信?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128)

Google搜烦后发现原来是python 2.7的库文gLib/mimetypes.py存在bug.解决办法参照q里修改。行前标?的是需要新增的内容Q行前标?的是要删除的内容。保存退出后Q再q行guestbook没问题了。注?from itertools import countq一行不要漏掉了?img border="0" alt="" src="http://www.shnenglu.com/images/cppblog_com/huyutian/QQ截图20140212222221.jpg" width="793" height="446" />
三、本地调试Google App Engine应用
错误"from google.appengine.api import urlfetch
ImportError: No module named google.appengine.api"。这是因为环境变量没有设|正?br />在环境变量增加一条PythonPath=“your google app engine path”

错误No api proxy found for service "urlfetch"
本地调试urlfetch调用Ӟ会遇到这U错误。解军_?br />
from google.appengine.api import apiproxy_stub_map
from google.appengine.api import urlfetch_stub

apiproxy_stub_map.apiproxy = apiproxy_stub_map.APIProxyStubMap() 
apiproxy_stub_map.apiproxy.RegisterStub('urlfetch', urlfetch_stub.URLFetchServiceStub())
如果需要调试其他gae APIQ比如mail,datastore),可以d以下代码
from google.appengine.api import datastore_file_stub 
from google.appengine.api import mail_stub 
from google3.apphosting.api import user_service_stub 
apiproxy_stub_map.apiproxy.RegisterStub('user', 
user_service_stub.UserServiceStub()) 
apiproxy_stub_map.apiproxy.RegisterStub('datastore_v3', 
  datastore_file_stub.DatastoreFileStub('your_app_id', '/dev/null', '/ 
dev/null')) 
apiproxy_stub_map.apiproxy.RegisterStub('mail', 
mail_stub.MailServiceStub())

调试gae应用E序Q也可以考虑使用在线python调试环境http://py-ide-online.appspot.com/
或者用Google提供的unittest功能。可以参考官|文?a >q里?br />
python ImportError: No module named yaml错误
我的q行环境是win7 64位,本想使用easy_install pyyaml来安装,l果没找到?/div>
只好?a >官网下蝲 pyyaml源码Q然后执行:python setup.py --without-libyaml install重新~译q安装?/div>


]]>python技巧摘录(一Q?/title><link>http://www.shnenglu.com/huyutian/articles/205669.html</link><dc:creator>胡雨?/dc:creator><author>胡雨?/author><pubDate>Sat, 15 Feb 2014 13:11:00 GMT</pubDate><guid>http://www.shnenglu.com/huyutian/articles/205669.html</guid><wfw:comment>http://www.shnenglu.com/huyutian/comments/205669.html</wfw:comment><comments>http://www.shnenglu.com/huyutian/articles/205669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/huyutian/comments/commentRss/205669.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/huyutian/services/trackbacks/205669.html</trackback:ping><description><![CDATA[一、将dictionary转换为字W串<br />python 3.0+<br /><div>>>> k = {'MASTER_HOST': '10.178.226.196', 'MASTER_PORT': 9999}</div><div>>>> <span style="color: #0000ff;">', '.join("{!s}={!r}".format(k,v) for (k,v) in k.items())</span></div><div>"MASTER_PORT=9999, MASTER_HOST='10.178.226.196'"<br />python 2.X<br /><div><span style="color: #0000ff;">', '.join("%s=%r" % (key,val) for (key,val) in k.iteritems())</span><br />区别于str()<br /><div>>>> k = {'MASTER_HOST': '10.178.226.196', 'MASTER_PORT': 9999}</div><div>>>> <span style="color: #0000ff;">str(k)</span></div><div>"{'MASTER_PORT': 9999, 'MASTER_HOST': '10.178.226.196'}"<br />二?span style="background-color: #ffffff; color: #333333; font-family: Verdana, 宋体, Helvetica, sans-serif;">数字转换Z十六q制字符?br />hex()Q注意{换的字符串以0x开?br /></span><div><span style="color: #0000ff;">'{:x}'.format(int)</span>Q{换后L了前面的0x<br /><span style="color: #333333; font-family: Verdana, 宋体, Helvetica, sans-serif; background-color: #ffffff;">十六q制的字W串转ؓ十进制数?br /></span><div>>>> int('0xff',16)</div><div>255</div><div>>>> int('ff',16)</div><div>255</div></div></div></div></div><img src ="http://www.shnenglu.com/huyutian/aggbug/205669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/huyutian/" target="_blank">胡雨?/a> 2014-02-15 21:11 <a href="http://www.shnenglu.com/huyutian/articles/205669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python自学W记Q四Q?/title><link>http://www.shnenglu.com/huyutian/articles/205650.html</link><dc:creator>胡雨?/dc:creator><author>胡雨?/author><pubDate>Sat, 15 Feb 2014 13:10:00 GMT</pubDate><guid>http://www.shnenglu.com/huyutian/articles/205650.html</guid><wfw:comment>http://www.shnenglu.com/huyutian/comments/205650.html</wfw:comment><comments>http://www.shnenglu.com/huyutian/articles/205650.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/huyutian/comments/commentRss/205650.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/huyutian/services/trackbacks/205650.html</trackback:ping><description><![CDATA[知识准备<br />一、安装调用包<br /><div>httplib2是一个功能全面的HTTP client?/div><span style="font-family: Tahoma; font-size: 12px;">1. 官网下蝲地址</span><br /><div>https://code.google.com/p/httplib2/</div><div><span style="font-size: 12px; font-family: Tahoma;">2.解压安装</span></div><div><span style="font-size: 12px; font-family: Tahoma;">假设解压刎ͼD:/httplib2Q命令行执行</span><font face="Tahoma"><span style="font-size: 12px;">D:/httplib2>python setup.py installok</span></font><br /><font face="Tahoma"><span style="font-size: 12px;">二?/span></font><span style="font-size: 12px;">使用 pdb q行调试</span><div><span style="font-size: 12px;">pdb ?python 自带的一个包Qؓ python E序提供了一U交互的源代码调试功能,主要Ҏ包括设|断炏V单步调试、进入函数调试、查看当前代码、查看栈片段、动态改变变量的值等。pdb 提供了一些常用的调试命o?/span></div><div><span style="font-size: 12px;">命o</span><span style="font-size: 12px; white-space: pre;"> </span><span style="font-size: 12px;">解释</span></div><div><span style="font-size: 12px;">break ?b   讄断点<span style="white-space:pre"> </span>讄断点</span></div><div><span style="font-size: 12px;">cl                 清除指定的断炏V如果没有带参数,则清除所有断炏V?/span></div><div><span style="font-size: 12px;">disable        取消所有断点的功能,但仍然保留这些断炏V?/span></div><div><span style="font-size: 12px;">enable         恢复断点的功能?/span></div><div><span style="font-size: 12px;">continue ?c<span style="white-space:pre"> </span>l箋执行E序</span></div><div><span style="font-size: 12px;">list ?l       <span style="white-space:pre"> </span>查看当前行的代码D?/span></div><div><span style="font-size: 12px;">step ?s   <span style="white-space: pre;">  </span>q入函数<br /></span><span style="font-size: 12px;">next ?n</span><span style="font-size: 12px; white-space: pre;"> </span><span style="font-size: 12px;">执行下一?/span><span style="font-size: 12px;"><br /></span></div><div><span style="font-size: 12px;">return ?r    执行代码直到从当前函数返?/span></div><div><span style="font-size: 12px;">exit ?q<span style="white-space:pre"> </span>中止q?/span></div><div><span style="font-size: 12px;">p <span style="white-space: pre;">  </span>打印变量的?/span><br /><div><br />有好几种Ҏ来用pdbQ?/div><div>1.用python3 -m pdb myscript.py来运行脚本?/div><div>2.在需要调试的代码前面插入pdb.set_trace()?当然Q先要import pdb包。如果觉得麻烦,可以在py文g的开头就调用pdb.set_trace(). 然后p像gdb一L调试了。帮助可以用help来查看?/div><div><span style="font-size: 12px;">Python IDLE中进行调试程?/span></div><div><span style="font-size: 12px;">IDLE分python shellH口和py文g~辑H口两种H口。前者是用来debug的,后者是用来~写py文g的?/span></div><div><span style="font-size: 12px;">如果要启用debug功能Q需要先在python shellH口中打开debuger: 点点击Debug->Debuger。然后在py文g~辑H口点击Run->Run ModuleQ或者F5Q就可以开始调试了。在开始调试后Q可以在py文g~辑H口用右键来讄断点?/span></div><div></div></div><div></div></div><img src ="http://www.shnenglu.com/huyutian/aggbug/205650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/huyutian/" target="_blank">胡雨?/a> 2014-02-15 21:10 <a href="http://www.shnenglu.com/huyutian/articles/205650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python自学W记Q三Q?/title><link>http://www.shnenglu.com/huyutian/articles/205632.html</link><dc:creator>胡雨?/dc:creator><author>胡雨?/author><pubDate>Sat, 15 Feb 2014 13:09:00 GMT</pubDate><guid>http://www.shnenglu.com/huyutian/articles/205632.html</guid><wfw:comment>http://www.shnenglu.com/huyutian/comments/205632.html</wfw:comment><comments>http://www.shnenglu.com/huyutian/articles/205632.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/huyutian/comments/commentRss/205632.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/huyutian/services/trackbacks/205632.html</trackback:ping><description><![CDATA[     摘要:      q次学习的目标是实现115.com的自动登录、签到、摇一摇?15是国内流行的|盘。容量大Q可分n的资源丰富?15|站为吸引用P讄了签到功能和摇一摇功能。本希望写Z个能自动d{ֈ的pythonE序。搜索了一下,|上已经有高?deadblue@gmail.com写好Q妖妖舞娘ؓ一个Google App EngineQGAEQ应用,利用GAE的调?..  <a href='http://www.shnenglu.com/huyutian/articles/205632.html'>阅读全文</a><img src ="http://www.shnenglu.com/huyutian/aggbug/205632.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/huyutian/" target="_blank">胡雨?/a> 2014-02-15 21:09 <a href="http://www.shnenglu.com/huyutian/articles/205632.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python自学W记Q二Q?/title><link>http://www.shnenglu.com/huyutian/articles/205631.html</link><dc:creator>胡雨?/dc:creator><author>胡雨?/author><pubDate>Tue, 04 Feb 2014 01:43:00 GMT</pubDate><guid>http://www.shnenglu.com/huyutian/articles/205631.html</guid><wfw:comment>http://www.shnenglu.com/huyutian/comments/205631.html</wfw:comment><comments>http://www.shnenglu.com/huyutian/articles/205631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/huyutian/comments/commentRss/205631.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/huyutian/services/trackbacks/205631.html</trackback:ping><description><![CDATA[python自带的IDLE用来写写单的程序是_了,但如果打认真学pythonQ还是有必要配置一个良好的开发环境。参考了|上的大量文章,最l我选择了sublime text 2?br />sublime text 2 是非常好用的免费跨^台编辑器Q目前从<a >官网</a>可以下蝲最新的2.02版本。安装好后本w默认支持build python(快捷键Ctrl+B)。但?span style="font-size: 12px;">代码中如果用了input{函数进行交互的时候,q行信息栏内无法输入交互信息Q程序还会提C报错?/span><br /><span style="font-size: 12px;">sublime text 2支持灉|的自定义和package插g?/span><br /><div><span style="font-size: 12px;">安装Sublime Text 2插g有两U方法:</span></div><div><span style="font-size: 12px;">1.直接安装</span></div><div><span style="font-size: 12px;">直接下蝲插g安装包解压羃到Packages目录Q菜?>preferences->packagesQ?/span></div><div><span style="font-size: 12px;">2.</span><span style="font-size: 12px;">使用Package Controllg安装</span></div><div><span style="font-size: 12px;">先安装package controllgQ然后直接在U安装?/span><span style="font-size: 12px;">按Ctrl+`调出console</span></div><div><span style="font-size: 12px;">_脓以下代码到底部命令行q回车(参?a >q里</a>Q:<br /></span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">import</span> urllib2,os;pf=<span style="color: #800000; ">'</span><span style="color: #800000; ">Package Control.sublime-package</span><span style="color: #800000; ">'</span>;ipp=sublime.installed_packages_path();os.makedirs(ipp) <span style="color: #0000FF; ">if</span> <span style="color: #0000FF; ">not</span> os.path.exists(ipp) <span style="color: #0000FF; ">else</span> None;open(os.path.join(ipp,pf),<span style="color: #800000; ">'</span><span style="color: #800000; ">wb</span><span style="color: #800000; ">'</span>).write(urllib2.urlopen(<span style="color: #800000; ">'</span><span style="color: #800000; ">http://sublime.wbond.net/</span><span style="color: #800000; ">'</span>+pf.replace(<span style="color: #800000; ">'</span><span style="color: #800000; "> </span><span style="color: #800000; ">'</span>,<span style="color: #800000; ">'</span><span style="color: #800000; ">%20</span><span style="color: #800000; ">'</span>)).read())</div></div><div><span style="font-size: 12px;">重启Sublime Text 2?/span></div><div><span style="font-size: 12px;">如果在Perferences->package settings中看到package controlq一,pC安装成功啦。有时候package安装p|是因?/span><span style="color: #222222; font-family: 微Y雅黑, 宋体, 'Trebuchet MS', Tahoma, Arial, sans-serif; line-height: 22px; background-color: #ffffff;">github|络讉K出错。可以考虑</span>使用GoAgent代理U学上网下蝲Package后直接安装?/div><div><span style="font-size: 12px;">用Package Control安装插g的方法:</span></div><div><span style="font-size: 12px;">按下Ctrl+Shift+P调出命o面板Q?/span><span style="font-size: 12px;">输入install 调出 Install Package 选项q回车,然后在列表中选中要安装的插g?br /><br /></span><span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">SublimeREPL 插g可以完美支持python的build和debug?/span></div>?span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">SublimeREPL</span>配置快捷?br />打开sublime text 2, 选菜单Preferences ->key Bindings User增加以下代码Q就为Python增加了两个快捷键QF5 - “Python RUN current file”<br />Ctrl+F5 - “Python - PDB current file”。更多关于如何设|快捷键可以参照官网<a >q里</a>。快捷键的设|,最重要的是要找到应用的id和文件位|,<span style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff;">SublimeREPL与python有关的各id可以参照</span><a >|页</a>Q也可以在你安装的sublime text 2目录下找到Default.sublime-commands文gQ我选择的默认安装,对应目录是C:\Users\*****\AppData\Roaming\Sublime Text 2\Packages\SublimeREPL\config\Python<br />更多有关sublime text 2自定义快捷键Q可以参?a >q里</a><span style="font-size: 12px;">?/span><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->[<br />    {<br />        <span style="color: #800000; ">"</span><span style="color: #800000; ">keys</span><span style="color: #800000; ">"</span>: [<span style="color: #800000; ">"</span><span style="color: #800000; ">f5</span><span style="color: #800000; ">"</span>],<br />        <span style="color: #800000; ">"</span><span style="color: #800000; ">caption</span><span style="color: #800000; ">"</span>: <span style="color: #800000; ">"</span><span style="color: #800000; ">SublimeREPL: Python - RUN current file</span><span style="color: #800000; ">"</span>,<br />        <span style="color: #800000; ">"</span><span style="color: #800000; ">command</span><span style="color: #800000; ">"</span>: <span style="color: #800000; ">"</span><span style="color: #800000; ">run_existing_window_command</span><span style="color: #800000; ">"</span>,<br />        <span style="color: #800000; ">"</span><span style="color: #800000; ">args</span><span style="color: #800000; ">"</span>:<br />        {<br />            <span style="color: #800000; ">"</span><span style="color: #800000; ">id</span><span style="color: #800000; ">"</span>: <span style="color: #800000; ">"</span><span style="color: #800000; ">repl_python_run</span><span style="color: #800000; ">"</span>,<br />            <span style="color: #800000; ">"</span><span style="color: #800000; ">file</span><span style="color: #800000; ">"</span>: <span style="color: #800000; ">"</span><span style="color: #800000; ">config/Python/Main.sublime-menu</span><span style="color: #800000; ">"</span><br />        }<br />    },<br />    {<br />        <span style="color: #800000; ">"</span><span style="color: #800000; ">keys</span><span style="color: #800000; ">"</span>: [<span style="color: #800000; ">"</span><span style="color: #800000; ">ctrl+f5</span><span style="color: #800000; ">"</span>],<br />        <span style="color: #800000; ">"</span><span style="color: #800000; ">caption</span><span style="color: #800000; ">"</span>: <span style="color: #800000; ">"</span><span style="color: #800000; ">SublimeREPL: Python - PDB current file</span><span style="color: #800000; ">"</span>,<br />        <span style="color: #800000; ">"</span><span style="color: #800000; ">command</span><span style="color: #800000; ">"</span>: <span style="color: #800000; ">"</span><span style="color: #800000; ">run_existing_window_command</span><span style="color: #800000; ">"</span>,<br />        <span style="color: #800000; ">"</span><span style="color: #800000; ">args</span><span style="color: #800000; ">"</span>:<br />        {<br />            <span style="color: #800000; ">"</span><span style="color: #800000; ">id</span><span style="color: #800000; ">"</span>: <span style="color: #800000; ">"</span><span style="color: #800000; ">repl_python_pdb</span><span style="color: #800000; ">"</span>,<br />            <span style="color: #800000; ">"</span><span style="color: #800000; ">file</span><span style="color: #800000; ">"</span>: <span style="color: #800000; ">"</span><span style="color: #800000; ">config/Python/Main.sublime-menu</span><span style="color: #800000; ">"</span><br />        }<br />    }<br />]</div><img src ="http://www.shnenglu.com/huyutian/aggbug/205631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/huyutian/" target="_blank">胡雨?/a> 2014-02-04 09:43 <a href="http://www.shnenglu.com/huyutian/articles/205631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>python自学W记Q一Q?/title><link>http://www.shnenglu.com/huyutian/articles/203598.html</link><dc:creator>胡雨?/dc:creator><author>胡雨?/author><pubDate>Tue, 04 Feb 2014 00:37:00 GMT</pubDate><guid>http://www.shnenglu.com/huyutian/articles/203598.html</guid><wfw:comment>http://www.shnenglu.com/huyutian/comments/203598.html</wfw:comment><comments>http://www.shnenglu.com/huyutian/articles/203598.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/huyutian/comments/commentRss/203598.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/huyutian/services/trackbacks/203598.html</trackback:ping><description><![CDATA[写完q篇blogQ却忘发了,呵呵<br />python向往很久了,国庆得闲l于军_开始学习这门语a。我的计划是以实用ؓ目的Q边用边学。首先当然先看看入门书,了解了解语法和大致结构,安装~程环境Q这个花了差不多一天时间?br />下蝲python请到官网<span style="font-size: 12px;">http://www.python.org/getit/Q目前最新版?.3.2。徏议直接下载最新版学习Q从python2.7?.3.2有较大改变,很多|站的教材都是针?.x版本的,?.x都不再适用了。比如:print “hello!"语句?.x版中是可以的Q但3.x版中必须改ؓprint("hello")。最好是直接用官|的教程和说明文档,更新及时Q不会存在版本差异造成的问题?br /><br />W一目标Q写一个搜索Fling!毛毛球碰撞游戏的{案的程?br /></span><span style="color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;">Fling!是苹果iphonepȝ的一个小游戏Q后来也被移植到安卓pȝ中。游戏玩法就是通过撞盘上的球Q最后只剩下一个球?/span><br style="word-wrap: normal; color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;" /><span style="color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;">itune|址</span><a target="_blank" style="word-wrap: normal; color: #334f77; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;">https://itunes.apple.com/us/app/fling!/id325815008?mt=8</a><br style="word-wrap: normal; color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;" /><span style="color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;">android|址</span><a target="_blank" style="word-wrap: normal; color: #334f77; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;">https://play.google.com/store/apps/details?id=com.mbgames.fling</a><br style="word-wrap: normal; color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei; background-color: #f3f9f6;" /><span style="background-color: #f3f9f6; color: #111111; font-family: Tahoma, Helvetica, 'Microsoft Yahei', SimSun, sans-serif, Hei;">喜Ƣ这个游戏,前面20多关隑ֺ都不大Q但?7关以后就没那么容易解决了。我先用excel的vba宏写了一个程序,可惜vbaq行太慢Q?5个球的解{就要搜索近半个时。现在想把它改写成python版本。excel版的毛球解决E序我已l放在这里了</span><a >http://club.excelhome.net/thread-1061267-1-1.html<br /></a><br />最后实现的代码如下Q用CclassQ数据存储用了list[].<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">  1</span> <span style="color: #0000FF; ">import</span> copy<br /><span style="color: #008080; ">  2</span> <span style="color: #0000FF; ">class</span> Fling:<br /><span style="color: #008080; ">  3</span>     <span style="color: #0000FF; ">def</span> <span style="color: #800080; ">__init__</span>(self, parent=0, balls=[[0]*7 <span style="color: #0000FF; ">for</span> x <span style="color: #0000FF; ">in</span> range(8)]):<br /><span style="color: #008080; ">  4</span>         self.balls = copy.deepcopy(balls)<br /><span style="color: #008080; ">  5</span>         self.code = 0                               <span style="color: #008000; ">#</span><span style="color: #008000; ">balls's hash code</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">  6</span> <span style="color: #008000; "></span>        self.scan = False<br /><span style="color: #008080; ">  7</span>         self.parent = parent<br /><span style="color: #008080; ">  8</span>         self.x = 0<br /><span style="color: #008080; ">  9</span>         self.y = 0<br /><span style="color: #008080; "> 10</span>         self.direct = 0<br /><span style="color: #008080; "> 11</span> <br /><span style="color: #008080; "> 12</span>     <span style="color: #0000FF; ">def</span> setCode(self):<br /><span style="color: #008080; "> 13</span>         self.code = 0<br /><span style="color: #008080; "> 14</span>         <span style="color: #0000FF; ">for</span> y <span style="color: #0000FF; ">in</span> range(0,8):<br /><span style="color: #008080; "> 15</span>             <span style="color: #0000FF; ">for</span> x <span style="color: #0000FF; ">in</span> range(0,7):<br /><span style="color: #008080; "> 16</span>                 <span style="color: #0000FF; ">if</span> self.balls[y][x] != 0:<br /><span style="color: #008080; "> 17</span>                     self.code = self.code * 131 + x<br /><span style="color: #008080; "> 18</span>                     self.code = self.code % 16393001 <span style="color: #008000; ">#</span><span style="color: #008000; ">防止溢出</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 19</span> <span style="color: #008000; "></span>                    self.code = self.code * 131 + y<br /><span style="color: #008080; "> 20</span>                     self.code = self.code % 16393001<br /><span style="color: #008080; "> 21</span>         <br /><span style="color: #008080; "> 22</span>     <span style="color: #0000FF; ">def</span> reset(self):<br /><span style="color: #008080; "> 23</span>         self.balls = [[0]*7 <span style="color: #0000FF; ">for</span> x <span style="color: #0000FF; ">in</span> range(8)]<br /><span style="color: #008080; "> 24</span>         self.scan = False<br /><span style="color: #008080; "> 25</span>         self.code = 0<br /><span style="color: #008080; "> 26</span>         self.parent = 0<br /><span style="color: #008080; "> 27</span>         self.x = 0<br /><span style="color: #008080; "> 28</span>         self.y = 0<br /><span style="color: #008080; "> 29</span>         self.direct = 0<br /><span style="color: #008080; "> 30</span>         <br /><span style="color: #008080; "> 31</span>     <span style="color: #0000FF; ">def</span> collision(self, x, y, direct):<br /><span style="color: #008080; "> 32</span>         flag = False<br /><span style="color: #008080; "> 33</span>         <span style="color: #008000; ">#</span><span style="color: #008000; "> 向上抛球</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 34</span> <span style="color: #008000; "></span>        <span style="color: #0000FF; ">if</span> direct == 0:<br /><span style="color: #008080; "> 35</span>             i = y - 1<br /><span style="color: #008080; "> 36</span>             <span style="color: #0000FF; ">while</span> i >= 0:<br /><span style="color: #008080; "> 37</span>                 <span style="color: #0000FF; ">if</span> self.balls[i][x] != 0:           <span style="color: #008000; ">#</span><span style="color: #008000; ">遇到?/span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 38</span> <span style="color: #008000; "></span>                    <span style="color: #0000FF; ">if</span> flag == False:               <span style="color: #008000; ">#</span><span style="color: #008000; ">遇到W一个球</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 39</span> <span style="color: #008000; "></span>                        <span style="color: #0000FF; ">if</span> i == y - 1:<br /><span style="color: #008080; "> 40</span>                             <span style="color: #0000FF; ">break</span>                   <span style="color: #008000; ">#</span><span style="color: #008000; ">exit while</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 41</span> <span style="color: #008000; "></span>                        self.balls[y][x] = 0<br /><span style="color: #008080; "> 42</span>                         self.balls[i + 1][x] = 1    <span style="color: #008000; ">#</span><span style="color: #008000; ">母球Ud到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 43</span> <span style="color: #008000; "></span>                        flag = True                 <span style="color: #008000; ">#</span><span style="color: #008000; ">撞成立</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 44</span> <span style="color: #008000; "></span>                    <span style="color: #0000FF; ">elif</span> i != y - 1:<br /><span style="color: #008080; "> 45</span>                        self.balls[y][x] = 0<br /><span style="color: #008080; "> 46</span>                        self.balls[i + 1][x] = 1     <span style="color: #008000; ">#</span><span style="color: #008000; ">母球Ud到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 47</span> <span style="color: #008000; "></span>                    y = i<br /><span style="color: #008080; "> 48</span>                 i = i - 1<br /><span style="color: #008080; "> 49</span>             <br /><span style="color: #008080; "> 50</span>         <span style="color: #008000; ">#</span><span style="color: #008000; "> 向右抛球</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 51</span> <span style="color: #008000; "></span>        <span style="color: #0000FF; ">elif</span> direct == 1:<br /><span style="color: #008080; "> 52</span>             i = x + 1<br /><span style="color: #008080; "> 53</span>             <span style="color: #0000FF; ">while</span> i < 7:<br /><span style="color: #008080; "> 54</span>                 <span style="color: #0000FF; ">if</span> self.balls[y][i] != 0:           <span style="color: #008000; ">#</span><span style="color: #008000; ">遇到?/span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 55</span> <span style="color: #008000; "></span>                    <span style="color: #0000FF; ">if</span> flag == False:               <span style="color: #008000; ">#</span><span style="color: #008000; ">遇到W一个球</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 56</span> <span style="color: #008000; "></span>                        <span style="color: #0000FF; ">if</span> i == x + 1:<br /><span style="color: #008080; "> 57</span>                             <span style="color: #0000FF; ">break</span>                   <span style="color: #008000; ">#</span><span style="color: #008000; ">盔R球不能碰?/span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 58</span> <span style="color: #008000; "></span>                        self.balls[y][x] = 0<br /><span style="color: #008080; "> 59</span>                         self.balls[y][i - 1] = 1    <span style="color: #008000; ">#</span><span style="color: #008000; ">母球Ud到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 60</span> <span style="color: #008000; "></span>                        flag = True                 <span style="color: #008000; ">#</span><span style="color: #008000; ">撞成立</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 61</span> <span style="color: #008000; "></span>                    <span style="color: #0000FF; ">elif</span> i != x + 1:                <span style="color: #008000; ">#</span><span style="color: #008000; ">非相ȝ</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 62</span> <span style="color: #008000; "></span>                        self.balls[y][x] = 0<br /><span style="color: #008080; "> 63</span>                         self.balls[y][i - 1] = 1    <span style="color: #008000; ">#</span><span style="color: #008000; ">母球Ud到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 64</span> <span style="color: #008000; "></span>                    x = i                           <span style="color: #008000; ">#</span><span style="color: #008000; ">被撞球成为新的母?/span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 65</span> <span style="color: #008000; "></span>                i = i + 1<br /><span style="color: #008080; "> 66</span>             <br /><span style="color: #008080; "> 67</span>         <span style="color: #008000; ">#</span><span style="color: #008000; "> 向下抛球</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 68</span> <span style="color: #008000; "></span>        <span style="color: #0000FF; ">elif</span> direct == 2:<br /><span style="color: #008080; "> 69</span>             i = y + 1<br /><span style="color: #008080; "> 70</span>             <span style="color: #0000FF; ">while</span> i < 8:<br /><span style="color: #008080; "> 71</span>                 <span style="color: #0000FF; ">if</span> self.balls[i][x] != 0:           <span style="color: #008000; ">#</span><span style="color: #008000; ">遇到?/span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 72</span> <span style="color: #008000; "></span>                    <span style="color: #0000FF; ">if</span> flag == False:               <span style="color: #008000; ">#</span><span style="color: #008000; ">遇到W一个球</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 73</span> <span style="color: #008000; "></span>                        <span style="color: #0000FF; ">if</span> i == y + 1:<br /><span style="color: #008080; "> 74</span>                             <span style="color: #0000FF; ">break</span>                   <span style="color: #008000; ">#</span><span style="color: #008000; ">exit while</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 75</span> <span style="color: #008000; "></span>                        self.balls[y][x] = 0<br /><span style="color: #008080; "> 76</span>                         self.balls[i - 1][x] = 1    <span style="color: #008000; ">#</span><span style="color: #008000; ">母球Ud到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 77</span> <span style="color: #008000; "></span>                        flag = True                 <span style="color: #008000; ">#</span><span style="color: #008000; ">撞成立</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 78</span> <span style="color: #008000; "></span>                    <span style="color: #0000FF; ">elif</span> i != y + 1:<br /><span style="color: #008080; "> 79</span>                        self.balls[y][x] = 0<br /><span style="color: #008080; "> 80</span>                        self.balls[i - 1][x] = 1     <span style="color: #008000; ">#</span><span style="color: #008000; ">母球Ud到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 81</span> <span style="color: #008000; "></span>                    y = i<br /><span style="color: #008080; "> 82</span>                 i = i + 1<br /><span style="color: #008080; "> 83</span> <br /><span style="color: #008080; "> 84</span>         <span style="color: #008000; ">#</span><span style="color: #008000; "> 向左抛球</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 85</span> <span style="color: #008000; "></span>        <span style="color: #0000FF; ">elif</span> direct == 3:<br /><span style="color: #008080; "> 86</span>             i = x - 1<br /><span style="color: #008080; "> 87</span>             <span style="color: #0000FF; ">while</span> i >= 0:<br /><span style="color: #008080; "> 88</span>                 <span style="color: #0000FF; ">if</span> self.balls[y][i] != 0:           <span style="color: #008000; ">#</span><span style="color: #008000; ">遇到?/span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 89</span> <span style="color: #008000; "></span>                    <span style="color: #0000FF; ">if</span> flag == False:               <span style="color: #008000; ">#</span><span style="color: #008000; ">遇到W一个球</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 90</span> <span style="color: #008000; "></span>                        <span style="color: #0000FF; ">if</span> i == x - 1:<br /><span style="color: #008080; "> 91</span>                             <span style="color: #0000FF; ">break</span>                   <span style="color: #008000; ">#</span><span style="color: #008000; ">盔R球不能碰?/span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 92</span> <span style="color: #008000; "></span>                        self.balls[y][x] = 0<br /><span style="color: #008080; "> 93</span>                         self.balls[y][i + 1] = 1    <span style="color: #008000; ">#</span><span style="color: #008000; ">母球Ud到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 94</span> <span style="color: #008000; "></span>                        flag = True                 <span style="color: #008000; ">#</span><span style="color: #008000; ">撞成立</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 95</span> <span style="color: #008000; "></span>                    <span style="color: #0000FF; ">elif</span> i != x - 1:                <span style="color: #008000; ">#</span><span style="color: #008000; ">非相ȝ</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 96</span> <span style="color: #008000; "></span>                        self.balls[y][x] = 0<br /><span style="color: #008080; "> 97</span>                         self.balls[y][i + 1] = 1    <span style="color: #008000; ">#</span><span style="color: #008000; ">母球Ud到此</span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 98</span> <span style="color: #008000; "></span>                    x = i                           <span style="color: #008000; ">#</span><span style="color: #008000; ">被撞球成为新的母?/span><span style="color: #008000; "><br /></span><span style="color: #008080; "> 99</span> <span style="color: #008000; "></span>                i = i - 1<br /><span style="color: #008080; ">100</span>             <br /><span style="color: #008080; ">101</span>         <span style="color: #0000FF; ">if</span> flag == True:                            <span style="color: #008000; ">#</span><span style="color: #008000; ">撞成立Q最后一个球Ud屏幕</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">102</span> <span style="color: #008000; "></span>            self.balls[y][x] = 0<br /><span style="color: #008080; ">103</span>             self.setCode()<br /><span style="color: #008080; ">104</span> <br /><span style="color: #008080; ">105</span>         <span style="color: #0000FF; ">return</span> flag<br /><span style="color: #008080; ">106</span> <br /><span style="color: #008080; ">107</span> <span style="color: #008000; ">#</span><span style="color: #008000; "> import pdb</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">108</span> <span style="color: #008000; ">#</span><span style="color: #008000; "> pdb.set_trace() # opens up pdb prompt</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">109</span> <span style="color: #008000; "></span><br /><span style="color: #008080; ">110</span> question = [[1,0,0,1,0,1,0], \<br /><span style="color: #008080; ">111</span>             [0,1,0,0,0,0,0], \<br /><span style="color: #008080; ">112</span>             [0,0,0,0,0,0,1], \<br /><span style="color: #008080; ">113</span>             [0,0,0,1,1,0,0], \<br /><span style="color: #008080; ">114</span>             [0,0,0,1,0,0,0], \<br /><span style="color: #008080; ">115</span>             [0,0,1,1,1,0,0], \<br /><span style="color: #008080; ">116</span>             [0,0,1,0,0,0,0], \<br /><span style="color: #008080; ">117</span>             [0,0,1,0,0,0,0]]<br /><span style="color: #008080; ">118</span> myTree = []<br /><span style="color: #008080; ">119</span> myTree.append(Fling(0, question))<br /><span style="color: #008080; ">120</span> myHash = []<br /><span style="color: #008080; ">121</span> myHash.append(myTree[0].code)<br /><span style="color: #008080; ">122</span> <br /><span style="color: #008080; ">123</span> i = 0<br /><span style="color: #008080; ">124</span> <span style="color: #0000FF; ">while</span> i < len(myTree):<br /><span style="color: #008080; ">125</span>     <span style="color: #0000FF; ">if</span> myTree[i].scan != True:<br /><span style="color: #008080; ">126</span>         <span style="color: #0000FF; ">for</span> x <span style="color: #0000FF; ">in</span> range(0,7):<br /><span style="color: #008080; ">127</span>             <span style="color: #0000FF; ">for</span> y <span style="color: #0000FF; ">in</span> range(0,8):<br /><span style="color: #008080; ">128</span>                 <span style="color: #0000FF; ">if</span> myTree[i].balls[y][x] == 0:<br /><span style="color: #008080; ">129</span>                     <span style="color: #0000FF; ">continue</span><br /><span style="color: #008080; ">130</span>                 <br /><span style="color: #008080; ">131</span>                 snap = Fling(i, myTree[i].balls)<br /><span style="color: #008080; ">132</span>                 <span style="color: #0000FF; ">if</span> snap.collision(x,y,0):<br /><span style="color: #008080; ">133</span>                     <span style="color: #0000FF; ">if</span> snap.code <span style="color: #0000FF; ">not</span> <span style="color: #0000FF; ">in</span> myHash:<br /><span style="color: #008080; ">134</span>                         snap.x = x<br /><span style="color: #008080; ">135</span>                         snap.y = y<br /><span style="color: #008080; ">136</span>                         snap.direct = 0<br /><span style="color: #008080; ">137</span>                         myTree.append(snap)<br /><span style="color: #008080; ">138</span>                         myHash.append(snap.code)<br /><span style="color: #008080; ">139</span>                 <br /><span style="color: #008080; ">140</span>                 snap = Fling(i, myTree[i].balls)<br /><span style="color: #008080; ">141</span>                 <span style="color: #0000FF; ">if</span> snap.collision(x,y,1):<br /><span style="color: #008080; ">142</span>                     <span style="color: #0000FF; ">if</span> snap.code <span style="color: #0000FF; ">not</span> <span style="color: #0000FF; ">in</span> myHash:<br /><span style="color: #008080; ">143</span>                         snap.x = x<br /><span style="color: #008080; ">144</span>                         snap.y = y<br /><span style="color: #008080; ">145</span>                         snap.direct = 1<br /><span style="color: #008080; ">146</span>                         myTree.append(snap)<br /><span style="color: #008080; ">147</span>                         myHash.append(snap.code)<br /><span style="color: #008080; ">148</span> <br /><span style="color: #008080; ">149</span>                 snap = Fling(i, myTree[i].balls)<br /><span style="color: #008080; ">150</span>                 <span style="color: #0000FF; ">if</span> snap.collision(x,y,2):<br /><span style="color: #008080; ">151</span>                     <span style="color: #0000FF; ">if</span> snap.code <span style="color: #0000FF; ">not</span> <span style="color: #0000FF; ">in</span> myHash:<br /><span style="color: #008080; ">152</span>                         snap.x = x<br /><span style="color: #008080; ">153</span>                         snap.y = y<br /><span style="color: #008080; ">154</span>                         snap.direct = 2<br /><span style="color: #008080; ">155</span>                         myTree.append(snap)<br /><span style="color: #008080; ">156</span>                         myHash.append(snap.code)<br /><span style="color: #008080; ">157</span> <br /><span style="color: #008080; ">158</span>                 snap = Fling(i, myTree[i].balls)<br /><span style="color: #008080; ">159</span>                 <span style="color: #0000FF; ">if</span> snap.collision(x,y,3):<br /><span style="color: #008080; ">160</span>                     <span style="color: #0000FF; ">if</span> snap.code <span style="color: #0000FF; ">not</span> <span style="color: #0000FF; ">in</span> myHash:<br /><span style="color: #008080; ">161</span>                         snap.x = x<br /><span style="color: #008080; ">162</span>                         snap.y = y<br /><span style="color: #008080; ">163</span>                         snap.direct = 3<br /><span style="color: #008080; ">164</span>                         myTree.append(snap)<br /><span style="color: #008080; ">165</span>                         myHash.append(snap.code)<br /><span style="color: #008080; ">166</span> <br /><span style="color: #008080; ">167</span>         myTree[i].scan = True<br /><span style="color: #008080; ">168</span>     i = i + 1<br /><span style="color: #008080; ">169</span> <br /><span style="color: #008080; ">170</span> <span style="color: #008000; ">#</span><span style="color: #008000; ">查找所有弹球动?/span><span style="color: #008000; "><br /></span><span style="color: #008080; ">171</span> <span style="color: #008000; "></span>i = len(myTree) - 1<br /><span style="color: #008080; ">172</span> actions = []<br /><span style="color: #008080; ">173</span> <span style="color: #0000FF; ">while</span> myTree[i].parent != 0:<br /><span style="color: #008080; ">174</span>     actions.append([myTree[i].x, myTree[i].y, myTree[i].direct])<br /><span style="color: #008080; ">175</span>     i = myTree[i].parent<br /><span style="color: #008080; ">176</span> <span style="color: #0000FF; ">else</span>:<br /><span style="color: #008080; ">177</span>     actions.append([myTree[i].x, myTree[i].y, myTree[i].direct])<br /><span style="color: #008080; ">178</span> <br /><span style="color: #008080; ">179</span> <span style="color: #0000FF; ">print</span>(<span style="color: #800000; ">"</span><span style="color: #800000; ">Answer:\nx y direct(0:up,1:right,2:down,3:left)</span><span style="color: #800000; ">"</span>)<br /><span style="color: #008080; ">180</span> <span style="color: #0000FF; ">for</span> element <span style="color: #0000FF; ">in</span> reversed(actions):<br /><span style="color: #008080; ">181</span>     <span style="color: #0000FF; ">print</span>(element[0], element[1], element[2])<br /><span style="color: #008080; ">182</span> <br /><span style="color: #008080; ">183</span> </div><img src ="http://www.shnenglu.com/huyutian/aggbug/203598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/huyutian/" target="_blank">胡雨?/a> 2014-02-04 08:37 <a href="http://www.shnenglu.com/huyutian/articles/203598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初识Windows64位编E?/title><link>http://www.shnenglu.com/huyutian/articles/192882.html</link><dc:creator>胡雨?/dc:creator><author>胡雨?/author><pubDate>Fri, 05 Oct 2012 09:15:00 GMT</pubDate><guid>http://www.shnenglu.com/huyutian/articles/192882.html</guid><wfw:comment>http://www.shnenglu.com/huyutian/comments/192882.html</wfw:comment><comments>http://www.shnenglu.com/huyutian/articles/192882.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/huyutian/comments/commentRss/192882.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/huyutian/services/trackbacks/192882.html</trackback:ping><description><![CDATA[一、了?4位系l?br />关于64位系l有很多术语Q包括x64,IA-64,Intel 64,<span style="font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 20px; background-color: #ffffff; ">AMD64</span><span style="font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 20px; background-color: #ffffff; ">{等。花旉了解了一点其中的差异。根据兼Ҏ大致可以分Zc?/span><span style="font-family: Arial, Tahoma, Verdana, sans-serif; font-weight: bold; line-height: 20px; background-color: #ffffff; ">IA-64?/span><span style="font-family: Arial, Tahoma, Verdana, sans-serif; font-weight: bold; line-height: 20px; background-color: #ffffff; ">Intel 64?br /></span>IA-64Q或者说?span style="font-family: Arial, Tahoma, Verdana, sans-serif; line-height: 20px; background-color: #ffffff; ">Itanium(安腾)pdQ是Intel和HP公司开发的一?4位体pL构,主要用于服务器市场,与x86体系不兼宏V?br />Intel 64</span>Q包括EM64T / AMD64 / x86-64 / x64{,它是对x86体系架构的扩展,q向后兼宏V由于名U很多,所以很Ҏh。具体了解可参见<a >WIKI</a>?br />要想了解64位C++~程Q请?a >q里</a>?br />二、编译第一?4位程?br />q期个人电脑升U到Win7pȝQ编译器也换成了Visual Studio 2010。有一个Project需要用到zlib库。于是从<a >http://www.zlib.net/</a>下蝲了一份最新的zlib1.2.7<br />但是在编?4位动态库时却出错了?img src="http://www.shnenglu.com/images/cppblog_com/huyutian/QQ截图20121005165719.png" width="852" height="243" alt="" /><br />Ҏ我的分析Q应该与<span style="font-size: 12px;">PreBuildEvent</span>预处理环境有兟뀂因为我在win32环境下编译就没有问题。ؓ啥在x64环境下PreBuildEvent找不?..\..\contrib\masmx64"路径呢?那么到底在执行PreBuildEvent操作Ӟ当前的目录是哪里了?查了半天资料没找刎ͼ在郁L时候我惛_了一个办法。嘿嘿,关键时候还得靠自己啊。PreBuildEvent操作时执行的其实是一个多行的批处理命令(当然是支持宏替换的)。我直接在PreBuildEvent批命令中加入了一?br /><img src="http://www.shnenglu.com/images/cppblog_com/huyutian/QQ截图20121005170814.png" width="658" height="363" alt="" /><br />q行l果?br /><img src="http://www.shnenglu.com/images/cppblog_com/huyutian/QQ截图20121005171002.png" width="452" height="317" alt="" /><br />可以看出QX64 PreBuildEvent执行时的当前目录?D:\Projects\zlib-1.2.7\contrib\vstudio\vc10"Q检查一下zlib的目录结构,所以将"cd ..\..\contrib\masmx64"q一行修改ؓ"cd ..\..\masmx64"ok了?img src ="http://www.shnenglu.com/huyutian/aggbug/192882.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/huyutian/" target="_blank">胡雨?/a> 2012-10-05 17:15 <a href="http://www.shnenglu.com/huyutian/articles/192882.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DLL装蝲时出现死锁的分析http://www.shnenglu.com/huyutian/articles/153095.html胡雨?/dc:creator>胡雨?/author>Thu, 11 Aug 2011 13:46:00 GMThttp://www.shnenglu.com/huyutian/articles/153095.htmlhttp://www.shnenglu.com/huyutian/comments/153095.htmlhttp://www.shnenglu.com/huyutian/articles/153095.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/153095.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/153095.html最q用DLL装一个接口时Q出C死锁。调试分析发现是在DLL初始化时调用?font face="Verdana" color="#000000">CreateTimerQueue()函数。这个函C创徏一个新的线E。正是由于在DLL初始化时创徏新线E导致的死锁?br />怼问题讨论|页在这?br />http://www.eggheadcafe.com/software/aspnet/33401802/problem-createtimerqueue-in-initinstance.aspx

Note that you cannot do anything that creates threads in a DLL's InitInstance; any attempt to do so will deadlock your application.

Best Practices for Creating DLLs

Multimedia Timer Hangs in MFC DLL InitInstance

其实除了InitInsatance函数外,DllMainQ全局变量初始化如果直接或间接创徏了新的工作线E都会造成死锁。Best Practices for Creating DLLs介绍了DLL装蝲详细q程Q英文好的兄弟可以自qI下?/font> 为防资料丢失Q在q里保存一?a href="/Files/huyutian/DLL_bestprac.zip">/Files/huyutian/DLL_bestprac.zip

]]>
Windowspȝ三种定时器的分析http://www.shnenglu.com/huyutian/articles/149717.html胡雨?/dc:creator>胡雨?/author>Wed, 29 Jun 2011 02:46:00 GMThttp://www.shnenglu.com/huyutian/articles/149717.htmlhttp://www.shnenglu.com/huyutian/comments/149717.htmlhttp://www.shnenglu.com/huyutian/articles/149717.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/149717.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/149717.htmlWindowspȝ三种定时器的分析
目前QWindows下的定时器编E主要有三种方式?br />1)SetTimer定时器是利用WindowsH口消息WM_TIMER来实现的。用方法非常简单,SetTimer创徏定时器,KillTimer销毁定时器。用条件是调用U程必须要有H口消息队列message queueQ因此如果是工作U程无法用这U方法?br />2)WaitableTimer定时器,其实应该是一U线E同步对象,CreateWaitableTimer创徏定时器对象,SetWaitableTimer讄定时器回调函敎ͼCLoseHandle销毁定时器。WaitableTimer可以跨线E、进E用,只要知道定时器对象名字(创徏定时器时讄Q就可以控制该定时器对象了。WaitableTimer定时器的回调函数实际上是一个APCQAsynchronous Procedure CallsQ异步过E调用函数?br />关于APC斚w的知识可参?#8220;谈谈对APC的一点理?#8221;一文http://blog.csdn.net/wwwwly/archive/2009/07/10/4337907.aspx
3)TimerQueueTimer定时器,应该迄今ؓ止Windowspȝ最强大的定时器了。他可以支持多种工作模式Q而且定时_ֺ也是最高的?br />使用Ӟ首先要调用CreateTimerQueue创徏一个定时器队列Q然后用
CreateTimerQueueTimer来创Z个TimerQueueTimer定时器,
WT_EXECUTEDEFAULTQ默认设|,回调函数进入一个非I/O工作U程队列
WT_EXECUTEINTIMERTHREADQ回调函C为APCQ在定时器线E中被调用,被调用的条g是线E进入可警告{待状态alertable wait status。仅适用于短时Q务,否则可能会媄响队列中的其他定时器?br />WT_EXECUTEINIOTHREADQ回调函数进入一个I/O工作U程队列,
h意,大多数定时器都需要调用线E进入可警告{待状态alertable wait statusQƈ不是随随便便p发生定时调用的。一个线E是否进入可警告{待状态可参见微Y的说?a >http://msdn.microsoft.com/en-us/library/ms686307.aspx
A thread goes into an alertable wait state by calling either SleepEx, MsgWaitForMultipleObjectsEx, WaitForSingleObjectEx, or WaitForMultipleObjectsEx, with the function's bAlertable parameter set to TRUE.
所以希望定时器不受q种可警告等待状态的影响Q最好是用TimerQueue来完成?/font>

]]>
~译器是如何特D常数的除法转换为等效的乘法?/title><link>http://www.shnenglu.com/huyutian/articles/124742.html</link><dc:creator>胡雨?/dc:creator><author>胡雨?/author><pubDate>Wed, 25 Aug 2010 14:26:00 GMT</pubDate><guid>http://www.shnenglu.com/huyutian/articles/124742.html</guid><wfw:comment>http://www.shnenglu.com/huyutian/comments/124742.html</wfw:comment><comments>http://www.shnenglu.com/huyutian/articles/124742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/huyutian/comments/commentRss/124742.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/huyutian/services/trackbacks/124742.html</trackback:ping><description><![CDATA[今天调试一个程序时遇到了一D奇怪的汇编代码<br>        mov     eax, 68DB8BADh<br>        push    edi<br>        movsx   ecx, word ptr [esi+0Eh]<br>        imul    ecx<br>        sar     edx, 0Ch<br>        mov     eax, edx<br>        shr     eax, 1Fh<br>        add     edx, eax<br>看了半天也没看明白,主要是这?8DB8BADh出现的很H兀Q与前后代码在逻辑上都不相兌。到|上搜了下,q居然找C{案。原来这是一D늼译器除法优化ؓ乘法q算的典型代码。众所周知Q除法是最耗CPU的,能够转化为等效的乘法p快得多了。但不是每次除法都能q么优化的。对于一些特定数作ؓ被除数时Q这U优化还是很有效的?br><a >http://www.thesolver.it/Manuali/Factotum/source/076.htm</a>q里列出了一些典型数的除法{换表?br><img height=435 alt="" src="http://www.shnenglu.com/images/cppblog_com/huyutian/d32.GIF" width=386 border=0><br>q个表是32位运下除法转换Z法的一些案例。比?8DB8BADhq个术数就是用来{换除?25的。要计算x/625 = (x * 68DB8BADh) >>8.所以上面的代码其实是计算[esi +0Eh] / 10000.<br>下面q个表是64位运时除法转换Z法的一些魔术数Q摘录在此,以防备忘<br><img height=435 alt="" src="http://www.shnenglu.com/images/cppblog_com/huyutian/d64.GIF" width=386 border=0><br>如果x清楚相关的运原理可以看该网站的<span lang=EN-GB style="FONT-SIZE: 16.5pt; FONT-FAMILY: Arial" xml:lang="EN-GB">Chapter 10. Integer Division by Constants</span> Q网址?a >http://www.thesolver.it/Manuali/Factotum/source/062.htm</a><br>大家也可以自q一D小E序验证一下?br> <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; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #000000">#include </span><span style="COLOR: #000000"><</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000"><br></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> argc, </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> argv[])<br></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">{<br></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> a </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> getchar();<br></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> b </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> a </span><span style="COLOR: #000000">/</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">    printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a=%d\nb=a/10000=%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, a, b);<br></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">}<br></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000"></span></div> 在VC2008下设|项目编译属性Assembler OutputQ选择输出汇编代码Q看看编译出来的代码与上面的完全一致?br><img height=281 alt="" src="http://www.shnenglu.com/images/cppblog_com/huyutian/compile.GIF" width=741 border=0> <img src ="http://www.shnenglu.com/huyutian/aggbug/124742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/huyutian/" target="_blank">胡雨?/a> 2010-08-25 22:26 <a href="http://www.shnenglu.com/huyutian/articles/124742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转脓: VC 2005 解决Ҏ的目录结构设|和理http://www.shnenglu.com/huyutian/articles/123630.html胡雨?/dc:creator>胡雨?/author>Mon, 16 Aug 2010 14:25:00 GMThttp://www.shnenglu.com/huyutian/articles/123630.htmlhttp://www.shnenglu.com/huyutian/comments/123630.htmlhttp://www.shnenglu.com/huyutian/articles/123630.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/123630.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/123630.html今天在网上看CVC目理的文章,感觉非常有用。特别是对大、中型项目的规范化、条理化理非常有帮助,特{贴这里?br>VC 2005 解决Ҏ的目录结构设|和理
 
Roger (roger2yi@gmail.com)
 
一个中{规模的解决Ҏ通常都会包含多个目Q其中一些项目出静态库Q一些出动态库Q一些用于单元测试,q有的出最l的应用E序执行档。除此以外,Ҏ目的需求,q会使用一些第三方的库?br> 
所以ؓ解决Ҏ讄一个合理的目录l构Q不但可以得代码管理更井井有条Q项目成员之间也更容易相互配合,更重要的是能够得最l应用程序的安装包制作,源代码打包发布和转移变得十分Ҏ?br> 
解决Ҏ与项目:
从VC6之后VCpd׃用解x案(SolutionQ来替代原来的工作空_用于l织和管理多个相关的目QProjectQ?br> 
文章首先演示一个虚拟的解决Ҏ和我们期望得到的目录l构Q然后用VC2005的项目设|功能来一步一步达到我们的需求?br> 
 
虚拟解决ҎQ?br> 
该虚拟解x案名为GMAQ包含一个动态链接库目ChocolateMilk和一个应用程序项目PureMilkQ需要用一个第三方库log4cxxQApache log4j的C++UL版本Q用于日志输出)?br> 
log4cxx是以动态库的方式编译的Q所以我们需要它?样东西,分别是头文gQ导入库Qlog4cxx.lib, log4cxxd.libQ和动态链接库Qlog4cxx.dllQ?br> 
假设我们期望的目录结构如下图Q?br> 

 
1Q?GMA是解x案目?br>2Q?PureMilk和ChocolateMilk是项目目?br>3Q?Lib目录用于存放导入库或者静态库Q包括第三方库和自己的项目)
4Q?Include用于存放W三方库的头文g
5Q?Bin目录存放所有动态链接库和执行档Q包括自q产出和第三方库,区分Release和Debug两个版本。另外,E序q行q程中需要外部的数据文g和启动时需要的配置文g{等都可放于该目?br>6Q?Temp用于存放临时生成文gQ其中Compile存放~译器编译时生成的obj文gQLink存放链接器的输出文g?br> 
上面目录l构清晰Q一面了Ӟ当我们的E序需要制作安装包或者要打包源码
发布的时候,它能够得我们生zd得更Ҏ^_^
 
制作安装包时我们只需?#8220;/GMA/Bin/Release/”目录下的所有文件打包?br> 
发布和{UL码的时候我们可以打包除了Temp目录以外“/GMA/”下面的所有文件和目录Q如果不需要执行档Q也可不包括BinQ?br> 
我们的需求是明确的,可是VC 2005q不会自动ؓ我们做好上面所有的事情。不q我们ƈ不需要编写复杂的~译脚本QmakefileQ,只需要简单的修改目的缺省设|即可?br> 
我们需要VC为我们做的事情包括:
 
1Q?#8220;/GMA/Temp/Compile/”作ؓ目~译时用的中间目录
2Q?#8220;/GMA/Temp/Link/”作ؓ目链接的输出目?br>3Q当目是应用程序时Q在构徏l束后拷贝执行文件到“/GMA/Bin/Release/”?#8220;/GMA/Bin/Debug/”Q当目是动态链接库Ӟ除了拯dll到BinQ还拯导入库到“/GMA/Lib/”
4Q当目是应用程序时Q调试时q行“/GMA/Bin/Debug/”?#8220;/GMA/Bin/Release/”下面的执行文Ӟq以“/GMA/Bin/Debug/”?#8220;/GMA/Bin/Release/”为工作目?br> 
首先看一下项目设|中可以使用的宏Q常用的有:
 
ConfigurationName 配置名字Q通常是Debug或者Release
 IntDir ~译器用的中间目录Q出obj文g
OutDir 链接器用的输出目录
ProjectDir 目目录
ProjectName 目名字
SolutionDir  解决Ҏ目录
TargetDir 目标输出文g所在的目录
TargetExt 目标输出的扩展名
TargetFileName 目标输出文g名,包括扩展?/td>
TargetName 目标输出名,不包括扩展名
TargetPath 目标输出文g的全路径?


 首先来设|ChocolateMilkQ?br> 
1Q?#8220;/GMA/Temp/Compile/”作ؓ目~译时用的中间目录
2Q?#8220;/GMA/Temp/Link/”作ؓ目链接的输出目?br> 
 
 
注意高亮的部分,首先配|改成All ConfigurationQ全部配|)Q这样可以让我们同时修改Debug和Release的部分;
 
Output DirectoryQ输出目录,链接器)栏位填入Q?br>$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)
 
Intermediate DirectoryQ中间目录,~译器)栏位填入Q?br>$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)
 
3Q构建结束后拯动态链接库?#8220;/GMA/Bin/Release/”?#8220;/GMA/Bin/Debug/”Q拷贝导入库?#8220;/GMA/Lib/”
 
我们通常都会在Debug版本的输出库后面加上字母“d”以表C是Debug版本Q在Debug配置下,修改Import Library栏位Q?br> 
 
 
VC可以让我们设|构建前后执行的脚本E序Q所以ؓ了完?Q?br>我们需要写构徏后执行的脚本Q?br> 
 
在Command Line中填入,Debug配置下:
 
copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\;
copy $(TargetDir)$(TargetName)d.lib $(SolutionDir)\Lib\;
 
Release配置下:
 
copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\;
copy $(TargetDir)$(TargetName).lib $(SolutionDir)\Lib\;
 
之所以要分别讄是因为VC没有表示导入库的宏名?-_-P
 
OKQ到此ؓ止,你就可以~译ChocolateMilk目试试是不是一切正怺Q不q请认拯的目标目录事先徏立好?br> 
接下来我们设|应用程序项目PureMilkQ?br> 
1Q?#8220;/GMA/Temp/Compile/”作ؓ目~译时用的中间目录
2Q?#8220;/GMA/Temp/Link/”作ؓ目链接的输出目?br> 
首先配|改成All ConfigurationQ全部配|)Q这样可以让我们同时修改Debug和Release的部分;
 
Output DirectoryQ输出目录,链接器)栏位填入Q?br>$(SolutionDir)\Temp\Link\$(ProjectName)\$(ConfigurationName)
 
Intermediate DirectoryQ中间目录,~译器)栏位填入Q?br>$(SolutionDir)\Temp\Compile\$(ProjectName)\$(ConfigurationName)
 
3Q构建结束后拯执行文g?#8220;/GMA/Bin/Release/”?#8220;/GMA/Bin/Debug/”
 
在Command Line中填入,All配置下:
 
copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName);
 
4Q调试时q行“/GMA/Bin/Debug/”?#8220;/GMA/Bin/Release/”下面的执行文Ӟq以“/GMA/Bin/Debug/”?#8220;/GMA/Bin/Release/”为工作目?br> 

 
Command栏位填入Q?(SolutionDir)\Bin\$(ConfigurationName)\$(TargetFileName)
Working Directory栏位填入Q?(SolutionDir)\Bin\$(ConfigurationName)\
 
q样大功告成了Q现在你可以编译该执行E序q进行调试?/p>

补充1Q?br>

各位兄弟们,那个copy的问题我l于解决了,原来当目标\径的文g夹不存在Ӟcopy命o׃好用了,提示pȝ找不到指定的路径。,把这句话Q?br>copy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\;
换成以下q句OK?#8230;…
xcopy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\
注意Q命令变成了xcopy了,而且最后的分号L啦,之后即Bin目录下没有Debug或Release目录~译器也会自动生成的Q~

补充2Q?br>避免下次~译覆盖文g提示加个“/y” 参数Q具体修改如下:
xcopy $(TargetPath) $(SolutionDir)\Bin\$(ConfigurationName)\ /y
q回OK了,如果目标文g正在被用中的话Q会提示“׃n늊”哦!~

本文来自CSDN博客Q{载请标明出处Q?a >http://blog.csdn.net/rogeryi/archive/2007/01/13/1481923.aspx



]]>
转脓:STL之vector用法结http://www.shnenglu.com/huyutian/articles/107461.html胡雨?/dc:creator>胡雨?/author>Sun, 07 Feb 2010 16:00:00 GMThttp://www.shnenglu.com/huyutian/articles/107461.htmlhttp://www.shnenglu.com/huyutian/comments/107461.htmlhttp://www.shnenglu.com/huyutian/articles/107461.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/107461.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/107461.html/*
    Vector: 它就是数l的一个泛化推q, {同于数l,它拥有一D连l的内存I间Qƈ且v始地址不变Q?br>优点Q?Q很好的支持随机存取Q即[]操作W,查询操作高效
~点Q?Q插?删除会造成内存块的拯Q效率较?Q尾部元素除外)
    2Q内存空间不够时Q需要重新申请一块够大的内存ƈq行内存的拷贝,大大影响了vector的效?br>
*/

#include 
<iostream>
#include 
<vector>
#include 
<algorithm>

using namespace std;

void printVector(vector<int> v1)
{
//使用下标方式
//for (unsigned int i = 0; i < v1.size(); i++)
//{
// cout<<"v1["<<i<<"] = "<<v1[i]<<endl;
//}

//使用q代?br>//vector<int>::iterator iter;
//for (iter = v1.begin(); iter != v1.end(); iter++)
//{
// //cout<<"v1["<<iter-v1.begin()<<"] = "<<*iter<<endl;
// cout<<"v1["<<iter-v1.begin()<<"]"<<"="<<*iter<<", ";
//}
//cout<<endl;

//使用q代器指?br>//vector<int>::iterator *pIter; //ErrorQP代器指针需要分配内存才能用,
             
//或者通俗的说pIter未实现时Q?pIter是不定的,q行时对其赋值必M发生异常
vector<int>::iterator *pIter = new vector<int>::iterator; 
if(NULL == pIter)
{
   
return;
}

for(*pIter = v1.begin(); *pIter != v1.end(); (*pIter)++//此处若写?pIter++是不对的Q因?+优化U别较高
{
   cout
<<**pIter<<"";
}

if (NULL != pIter)
{
   delete pIter;
   pIter 
= NULL;
}

cout
<<endl;
}


void reversePrintVector(vector<int> vec)
{
vector
<int>::reverse_iterator revIter;
for (revIter = vec.rbegin(); revIter != vec.rend(); revIter++)
{
   cout
<<"v["<<revIter-vec.rbegin()<<"]="<<*revIter<<"";
}

cout
<<endl;
}

int main()
{
//创徏
vector<int> v1; //创徏I的vector对象
vector<int> v2(10); //创徏h10个元素的vector对象
vector<double> v3(109.1); //创徏h10个元素的vector对象Q每个元素的gؓ9.1
vector<double> v4(v3); //通过拯一个V3对象的各个元素|创徏一个新的vector对象
int iArray[] = {1113 , 192327};
vector
<int> v(iArray, iArray + 5);//通过拯q代器区间[first, end)的元素|创徏新的vector对象

//初始?---用push_backQ在容器的尾端插入新元素
v1.push_back(3);
v1.push_back(
10);
v1.push_back(
19);

//遍历讉K:1-下标方式Q略Q?br>//遍历讉K?:q代器方? 使用此方式ƈ熟练应用?/span>
cout<<"printVector(v1): "<<endl; 
printVector(v1);

//反向遍历之P代器方式
cout<<"reversePrintVector(v1):"<<endl;
reversePrintVector(v1);

//插入元素Q用insert(&pos, elem)
cout<<"v1.insert(v1.begin() + 1, 100)Q?nbsp;"<<endl;
v1.insert(v1.begin() 
+ 1100);
printVector(v1);

//删除元素: N元素删除用pop_back()Q单个元素删除用erase(&pos)Q?br>//[first, last)区间元素删除用erase(&first, &last); 整体删除用clear();
cout<<"v1.erase(v1.begin() + 1): "<<endl;
v1.erase(v1.begin() 
+ 1);
printVector(v1);
cout
<<"v1.pop_back():"<<endl;
v1.pop_back();
printVector(v1);

//查找函数:由外部算法提?/span>
vector<int>::iterator iter;
cout
<<"find(v1.begin(), v1.end(), 2) = "<<endl;
iter 
= find(v1.begin(), v1.end(), 10);
if (iter != v1.end())
   cout
<<"find "<<*iter<<" at index: "<<iter-v1.begin()<<endl;
else
   cout
<<"not find"<<endl; 

cout
<<"v1.empty() = "<<v1.empty()<<endl;
cout
<<"其它:\nv1.empty() = "<<v1.empty()<<", v1.size() = "<<v1.size()<<", v1.max_size() =(hex)"<<hex<<v1.max_size()<<endl;
cout
<<"head-elem="<<dec<<v1.front()<<endl;
cout
<<"tail-elem="<<v1.back()<<endl;

//清空
cout<<"v1.clear() "<<endl;
v1.clear();
cout
<<"v1.size() = "<<v1.size()<<", v1.empty()="<<v1.empty()<<endl;
}



////////////////////////////////////q行l果////////////////////////////////////////////////////////
printVector(v1):
31019,
reversePrintVector(v1):
v[
0]=19, v[1]=10, v[2]=3,
v1.insert(v1.begin() 
+ 1100)Q?br>31001019,
v1.erase(v1.begin() 
+ 1):
31019,
v1.pop_back():
310,
find(v1.begin(), v1.end(), 
2=
find 
10 at index: 1
v1.empty() 
= 0
其它:
v1.empty() 
= 0, v1.size() = 2, v1.max_size() =(hex)3fffffff
head
-elem=3
tail
-elem=10
v1.clear()
v1.size() 
= 0, v1.empty()=1


]]>转脓:STL之list之用法小l?/title><link>http://www.shnenglu.com/huyutian/articles/107460.html</link><dc:creator>胡雨?/dc:creator><author>胡雨?/author><pubDate>Sun, 07 Feb 2010 15:59:00 GMT</pubDate><guid>http://www.shnenglu.com/huyutian/articles/107460.html</guid><wfw:comment>http://www.shnenglu.com/huyutian/comments/107460.html</wfw:comment><comments>http://www.shnenglu.com/huyutian/articles/107460.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/huyutian/comments/commentRss/107460.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/huyutian/services/trackbacks/107460.html</trackback:ping><description><![CDATA[     摘要: /**//*list: {同于双向链表,内存I间可以是不q箋的,通过指针来进行数据的讉K   ? 1)插入/删除效率?nbsp;  ~? 1)不支持随机存取,查询效率较低*/#include <iostream>#include <string>#include ...  <a href='http://www.shnenglu.com/huyutian/articles/107460.html'>阅读全文</a><img src ="http://www.shnenglu.com/huyutian/aggbug/107460.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/huyutian/" target="_blank">胡雨?/a> 2010-02-07 23:59 <a href="http://www.shnenglu.com/huyutian/articles/107460.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转脓:STL之Deque使用结http://www.shnenglu.com/huyutian/articles/107459.html胡雨?/dc:creator>胡雨?/author>Sun, 07 Feb 2010 15:58:00 GMThttp://www.shnenglu.com/huyutian/articles/107459.htmlhttp://www.shnenglu.com/huyutian/comments/107459.htmlhttp://www.shnenglu.com/huyutian/articles/107459.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/107459.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/107459.html/*deque: 是一个double-ended queue,
    1)支持随即存取Q也是[]操作W,
    2)支持两端操作Qpush(pop)-back(front)Q在两端操作上与list效率差不?br>
    因此在实际用时Q如何选择q三个容器中哪一个,应根据你的需要而定Q一般应遵@下面的原则: 
    1、如果你需要高效的随即存取Q而不在乎插入和删除的效率Q用vector 
    2、如果你需要大量的插入和删除,而不兛_随即存取Q则应用list 
    3、如果你需要随卛_取,而且兛_两端数据的插入和删除Q则应用deque?br>
*/


#include 
<iostream>
#include 
<deque>
using namespace std;

void printDeque(deque<int> d)
{
//使用下标
//for (unsigned int i = 0; i < d.size(); i++)
//{
// cout<<"d["<<i<<"] = "<<d[i]<<", ";
//}

//使用q代?br>//deque<int>::iterator iter = d.begin();
//for (;iter != d.end(); iter ++)
//{
// cout<<"d["<<iter-d.begin()<<"] = "<<(*iter)<<", ";
//}

//使用q代器指?/span>
deque<int>::iterator *pIter = new deque<int>::iterator;
if ( NULL == pIter )
{
   
return ;
}

for (*pIter = d.begin(); *pIter != d.end(); (*pIter)++)
{
   cout
<<"d["<<*pIter - d.begin() <<"]="<<**pIter<<"";
}

if (NULL != pIter)
{
   delete pIter;
   pIter 
= NULL;
}


cout
<<endl;
}


void main()
{
//创徏deque
deque<int> d1; //创徏一个没有Q何元素的deque对象
deque<int> d2(10);//创徏一个具?0个元素的deque对象Q每个元素gؓ默认
deque<double> d3(105.5); //伊妹一个具?0个元素的deque对象,每个元素的初始gؓ5.5
deque<double> d4(d3); //通过拯一个deque对象的元素? 创徏一个新的deque对象
int iArray[] = {1113192327};
deque
<int> d5(iArray, iArray+5);//P代器区间[first, last)所指的元素拯C个新创徏的deque对象?br>
//初始化赋|同vector一?使用N插入函数push_back()
for (int i = 1; i < 6 ; i++)
   d1.push_back(i
*10);
//遍历元素: 1-下标方式 2-q代器方?nbsp;反向遍历Q略Q?/span>
cout<<"printDeque(d1) : "<<endl;
printDeque(d1);

//元素插入Q尾部插入用push_back()Q头部插入用push_front()Q其它位|插入用insert(&pos, elem)
cout<<"d1.push_front(100): "<<endl;
d1.push_front(
100);
printDeque(d1);
cout
<<"d1.insert(d1.begin()+3, 200): "<<endl; //支持随机存取(即[]操作W?Q所以begin()可以+3
d1.insert(d1.begin()+2,200);
printDeque(d1);

//元素删除 N删除用pop_back();头部删除用pop_front(); 
//Lq代位置或P代区间上的元素删除用erase(&pos)/erase(&first, &last)Q删除所有元素用clear();
cout<<"d1.pop_front(): "<<endl;
d1.pop_front();
printDeque(d1);

cout
<<"d1.erase(d1.begin()+1): "<<endl;
d1.erase(d1.begin()
+1); //删除W?个元素d1[1]
printDeque(d1);

cout
<<"d1.erase(d1.begin(), d1.begin() + 2) = "<<endl;
d1.erase(d1.begin(), d1.begin() 
+ 2);
printDeque(d1);

cout
<<"d1.clear() :"<<endl;
d1.clear();
printDeque(d1);


//其它常用
cout<<"其它常用用法: "<<endl;
int flag = 0;
while(flag < 2)
{
   
if (0 == flag )
   
{
    
for (int i = 1; i < 6 ; i++//恢复
     d1.push_back(i*10);
   }

   
else
   
{
    d1.clear();
    cout
<<"after d1.clear() , d1.front(), d1.back() is abnormal! other info.:"<<endl;
   }

   cout
<<"d1.empty() = "<<d1.empty()<<endl;
   cout
<<"d1.size() = "<<d1.size()<<endl;
   cout
<<"d1.max_size() = "<<hex<<d1.max_size()<<endl;
   
if (!d1.empty())
   
{
    cout
<<"d1.front() = "<<d1.front()<<endl;
    cout
<<"d1.back() = "<<d1.back()<<endl;
   }

  
   flag
++;
  
}


//交换
cout<<"d1.swap(d5)= "<<endl;
d1.swap(d5);
cout
<<"d1 = ";
printDeque(d1);
cout
<<"d5 = ";
printDeque(d5);
//printDeque(d)

}



]]>
转脓:STL之MAP使用结http://www.shnenglu.com/huyutian/articles/107458.html胡雨?/dc:creator>胡雨?/author>Sun, 07 Feb 2010 15:57:00 GMThttp://www.shnenglu.com/huyutian/articles/107458.htmlhttp://www.shnenglu.com/huyutian/comments/107458.htmlhttp://www.shnenglu.com/huyutian/articles/107458.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/107458.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/107458.html阅读全文

]]>
转脓:STL之set使用Ҏ结http://www.shnenglu.com/huyutian/articles/107457.html胡雨?/dc:creator>胡雨?/author>Sun, 07 Feb 2010 15:55:00 GMThttp://www.shnenglu.com/huyutian/articles/107457.htmlhttp://www.shnenglu.com/huyutian/comments/107457.htmlhttp://www.shnenglu.com/huyutian/articles/107457.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/107457.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/107457.html阅读全文

]]>
用成员函数、友元函数方式重载运符的区?/title><link>http://www.shnenglu.com/huyutian/articles/106643.html</link><dc:creator>胡雨?/dc:creator><author>胡雨?/author><pubDate>Thu, 28 Jan 2010 08:11:00 GMT</pubDate><guid>http://www.shnenglu.com/huyutian/articles/106643.html</guid><wfw:comment>http://www.shnenglu.com/huyutian/comments/106643.html</wfw:comment><comments>http://www.shnenglu.com/huyutian/articles/106643.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/huyutian/comments/commentRss/106643.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/huyutian/services/trackbacks/106643.html</trackback:ping><description><![CDATA[以前一直没太搞明白QC++书上在重载运符Ӟ有的使用友元函数Q有的用成员函数有何区别,但自qE序中需要重载运符的时候较,所以也没往心里厅R?br>最q写一个程序需要用到C++的函数lower_bound,binary_searchq行有序队列的查找。函数有一个参数需要调用比较函数。我׃用成员函数重载了operator >,l果~译报错。检查了半天也没扑ֈ问题Qؓ什么已l重载了比较q算W,q报错。然后在|上搜烦了一番,l于搞明白了?br>bool operator < (const MyClass &rhs);<br>在调用时实际上是this->(operator <)(&rhs);q个与lower_bound要求的比较函数的两个参数都要是对象引用不相符Q导致编译错误?br>修改为友元函数就ok了?br>friend bool operator < (const MyClass &lhs, const MyClass &rhs);<br><br>其实重蝲q算W是使用友元函数Q还是成员函敎ͼ有相当多讲究的?br>可以看看redsnow的下面这文?但这里主要是Ҏ自己实际中遇到和解决问题的一点体会来写的?br><font style="font-size: 14pt;" color="#02368d"><strong></strong></font><a ><font style="font-size: 14pt;" color="#02368d"><strong>C++的class的operator定义为friend function讨论</strong></font></a><br> <img src ="http://www.shnenglu.com/huyutian/aggbug/106643.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/huyutian/" target="_blank">胡雨?/a> 2010-01-28 16:11 <a href="http://www.shnenglu.com/huyutian/articles/106643.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从查找一ơ内存泄漏学到的...http://www.shnenglu.com/huyutian/articles/106467.html胡雨?/dc:creator>胡雨?/author>Tue, 26 Jan 2010 06:57:00 GMThttp://www.shnenglu.com/huyutian/articles/106467.htmlhttp://www.shnenglu.com/huyutian/comments/106467.htmlhttp://www.shnenglu.com/huyutian/articles/106467.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/106467.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/106467.html先说说这个工L使用。安装完毕,在需要调试的目中加入把Visual Leak Detector 的Include目录和LIB目录d到项目的路径中去。再在需要监视的cpp文g头中加入#include <vld.h>Q如果是MFCE序Q就可以直接在stdafx.h的最后面加上q一句。剩下的是q行调试E序Q在outputH口察看l果了?br>我的错误信息如下?br>---------- Block 251168 at 0x00FE9998: 16 bytes ----------
  Call Stack:
    c:\program files\microsoft visual studio .net 2003\vc7\include\xmemory (34): std::_Allocate<char>
    c:\program files\microsoft visual studio .net 2003\vc7\include\xmemory (137): std::allocator<char>::allocate
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (1454): std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Copy
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (1485): std::basic_string<char,std::char_traits<char>,std::allocator<char> >::_Grow
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (612): std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (623): std::basic_string<char,std::char_traits<char>,std::allocator<char> >::assign
    c:\program files\microsoft visual studio .net 2003\vc7\include\xstring (473): std::basic_string<char,std::char_traits<char>,std::allocator<char> >::operator=
    d:\projects\client\quoteclient\tradetransaction.cpp (2143): CTradeTransaction::AnsReadTodayOrder
    d:\projects\client\quoteclient\tradetransaction.cpp (2694): CTradeTransaction::ProcessAllReq
    d:\projects\client\quoteclient\tradesocket.cpp (93): CTradeSocket::ReceivePacket
    d:\projects\client\quoteclient\tradethread.cpp (146): CTradeThread::RunWorkerInternal
    d:\projects\client\quoteclient\tradethread.cpp (97): CTradeThread::WorkerThreadProc
    f:\vs70builds\3077\vc\crtbld\crt\src\threadex.c (241): _threadstartex
    0x7C80B729 (File and line number not available): GetModuleFileNameA
  Data:
    CD CD CD CD    CD CD CD CD    CD CD CD CD    CD CD CD CD     ........ ........
点击内存泄漏条目可以定位到某一行源代码Q可以看Z要是使用std::string不当造成的内存泄漏?br>q一步分析发现是׃Ҏ个结构体的成员变量std::string误用了memset初始化造成的?br>struct tag_myStruct
{
std::string id;
int value;
}
ȝ一下,在c语言中,l构体的初始化,是可以直接memset(pStruct, 0,  sizeof(tag_myStruct));
但在c++中必d心,比如上面的结构实际上是一个类了,习惯性的用memset׃出错。ؓ防止q种惯性思维Q徏议将所有复杂结构直接用class来申?然后定义~省构造函数。否则将来用时一不小心,可能造成不测?br>
补充Q尽量不要在C++E序中用C风格的代码。但q个是需要一些时间来调整的?

]]>
关于IDA使用的几个技巧(攉Q?/title><link>http://www.shnenglu.com/huyutian/articles/102223.html</link><dc:creator>胡雨?/dc:creator><author>胡雨?/author><pubDate>Sun, 29 Nov 2009 04:42:00 GMT</pubDate><guid>http://www.shnenglu.com/huyutian/articles/102223.html</guid><wfw:comment>http://www.shnenglu.com/huyutian/comments/102223.html</wfw:comment><comments>http://www.shnenglu.com/huyutian/articles/102223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/huyutian/comments/commentRss/102223.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/huyutian/services/trackbacks/102223.html</trackback:ping><description><![CDATA[     摘要: 1.IDA反编译生成c代码Ӟ有时会出现sp-analysis failed错误。这一般是׃IDA分析某个外部函数call时出C堆栈指针调整错误。可以先讄菜单option->General->Disassembly选中stack pointer.然后逐行看看哪些调用前后堆栈出现了偏差?.IDA可以通过定义struct/enum来增强生成C代码的可L。但有时候在分析一个程序时?..  <a href='http://www.shnenglu.com/huyutian/articles/102223.html'>阅读全文</a><img src ="http://www.shnenglu.com/huyutian/aggbug/102223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/huyutian/" target="_blank">胡雨?/a> 2009-11-29 12:42 <a href="http://www.shnenglu.com/huyutian/articles/102223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于~程中数据存储格式的选择http://www.shnenglu.com/huyutian/articles/100897.html胡雨?/dc:creator>胡雨?/author>Fri, 13 Nov 2009 14:06:00 GMThttp://www.shnenglu.com/huyutian/articles/100897.htmlhttp://www.shnenglu.com/huyutian/comments/100897.htmlhttp://www.shnenglu.com/huyutian/articles/100897.html#Feedback0http://www.shnenglu.com/huyutian/comments/commentRss/100897.htmlhttp://www.shnenglu.com/huyutian/services/trackbacks/100897.html1.数据l一采用float或者double要比混合采用float和double要快大约10%-20%
2.用__int64存储要比float或double都要慢,我想大概是由于我用的?2位处理器的原因,__int64是拼接而成的?br>3.全部选用float与全部选用double处理速度相当Q但好像double要稍快一些?br>以上是在我自q脑上跑自~程序测试的Q条件有限不一定准,但应该能说明一些问题。所以我认ؓ股票相关数据的存储在不考虑存储I间限制的情况下Q可以尽量用doublecdQ精度较高,速度也不满?br>

]]>
Ʒþþø| һþƵ| ɫɫݺɫۺϾþ| þòþüӰԺwwwձ| ۺϳ˾þôƬ91| þۺ97ɫֱ| 99þۺϹƷ| þþþavר| 鶹Ʒþþһ| ۺϾþҹAV | 69þþƷһ| þùƷ͵99| þúݺݸ߳޾Ʒ| ݺɫۺվþþþþþ| ޹һ˾þþƷ| ŷ龫Ʒþþþþþþžž | ޾Ʒһþþ | 㽶þۺӰ| ɫۺɫþû| þþֻоƷձ| ˾Ʒþ| þһ| þûƵ| þӰ㶮| ҹƷþþþþ| 99þۺϹƷ| þۺav| þþƷ99͵| ɫþþۺ| ޹ۺϾþ| 99þþƷѿ| һþþƷ| ¶ۺϼ¾þ| þĻ| ݺɫþۺ_| ŷƷһþ| ޾Ʒþþwww| ˼˼þ99ֻƵƷ66| þˬˬƬAV | þþƷƷƷ| þþþþҹӰԺ|