delphi启动了,我的程序速度就快,退出delphi我的程序速度就慢了,再启动又快了?(100分)

  • 主题发起人 主题发起人 Mengliao
  • 开始时间 开始时间
M

Mengliao

Unregistered / Unconfirmed
GUEST, unregistred user!
用了多线程,在线程的execute里调用了几个函数,其中两个函数里会经常调用synchronize方法,来更新主窗体中的paintbox的canvas(先在内存bitmap上画,然后copy到canvas上)。
运行正常,但是如果delphi正在运行,则绘图的速度很快,如果关闭了delphi则绘图速度要慢十几二十倍,再启动delph就又快了,再关闭了就又变慢了!?
反复试验,找不到原因,大家帮帮我啊!
 
补充一下:线程中的函数用了WaitForSingleObject来等待信号量,判断是否提前退出,设定的是20ms,每隔20毫秒在paintbox.canvas上擦除一两条线,再加一两条线。如果有信号量则退出函数,或者运行完成函数,总是要返回到execute方法,然后也就结束了。
我实验先启动这个程序,绘图很慢,然后同时启动delphi,再实验,绘图速度提高了非常多。不关闭这个程序,退出delphi,绘图速度马上就慢了!
 
delphi正在运行又占CPU又占内存反而快?不占反慢?不符合逻辑啊
 
那就让Delphi 一直运行不就可以了,
最好加载系统启动中,每次开机就运行,相当于超频.
 
今天又发现启动real player后速度也变快了?!
我说的速度慢是指当我设定waitforsingleobject的延时很短时,比如10ms、20ms、50ms等等,如果delphi启动了速度就飞快(在canvas上擦除、添加的内容非常非常少,设定10ms线条变化快的看不清楚),而要是不启动delphi,就会超过我设定的延时,一般在200毫秒左右。
但是如果把延时设为ignore后,无论是否启动delphi,速度都是飞快,快得看不清楚!
我把线程的synchronize方法调用注释了,改成往一个全局数组里写每次等待的时间信息,线程结束后察看这个数组,延时依然很长,有的300多ms,最短的也有100多ms,而我设定的只有10ms。
我估计大体上是因为waitforsingleobject的问题,但使用sleep也一样,改用GetTickCount或者QueryPerformanceCounter和QueryPerformanceFrequency后,用循环等待,无论是否启动delphi,速度都飞快了,但cpu占用率100%,而用waitforsingleobject只有20%多些,就是启动delphi后速度飞快的情况下,占用也超不过30%。
大侠们快来帮帮俺啊,俺实在是找不到解决途径了!
 
是不是WaitForSingleObject没有得到信号。运行delphi和Real1意外的给其发了信号。
 
不会是启动delphi等程序时启动某些内存管理的进程。 然后退出时则退出管理进程??
你看看win相关的吧。。
你的程序真是delphi亲生的。。:) 开个玩笑。。。 hoho。。
 
如象 logwatnt之类的东西, 好好看看。
 
该不会是你的程序生性怕孤单寂寞吧?多找几个伴给它,它就干得欢了?[:D]
 
来自:特尔斐, 时间:2006-6-9 17:59:52, ID:3467105
该不会是你的程序生性怕孤单寂寞吧?多找几个伴给它,它就干得欢了?[:D]
 

Similar threads

回复
0
查看
724
不得闲
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部