我的软件用了一段时间之后就会出现错误,甚至于不响应,请帮忙 ( 积分: 50 )

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

my128

Unregistered / Unconfirmed
GUEST, unregistred user!
我怀凝是
procedure SysDelay(aMs:Longint);//延时过程
var
TickCount:LongInt;
begin
stopdl:=false;
TickCount:=GetTickCount;
while (GetTickCount - TickCount < aMs) do
begin
Application.ProcessMessages;
end;
end;
这里出现问题,我用延时用得很多,只要软件一运行就延时,延时是1000毫秒,再运行一段程序,使得cpu时时在100%的状态,有什么方法可以解决非吗,嘻嘻先说明一下用sleep来延时是不行滴,我试过
 
用多线程
 
是不是真的用多线程就可以了,我对多线程不是很熟哦,给个小例子可以吗
 
在 Application.ProcessMessages;后面加一句 sleep(1);
这样cpu占用率会降低,误差一般在百分之2左右吧。

如果你一定要精确延时,应该想想别的办法,比如移植程序回dos操作系统下运行。windows是抢占式运行,你一段代码没执行完就被别的进程抢了cpu,再次轮到你的时候,时间可能已经过头了[:D]
 
上面这位朋友给的sleep(1)在你没有给之前,我试用过了,cpu100%问题是解决,但是我把程序打开挂在那里,过了一段时间还是会出错window还叫我发出错报告呢,我以为是内存没有释放好,所以加了一段
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
Application.ProcessMessages;
end;
还是出错,唉,上天啊,救救我吧
 
光这段延时代码是没啥问题,检查一下其他代码看看。
 
1、如果进行大量运算建议用多线程(这个问题不是很好理解,不是一两句就能给你讲清楚的,必须自己仔细看实例)。
2、请仔细分析是否有内存泄漏,这也很要命。
 
内存泄漏?我查看过了,内存的确是随时间增加而增加,只不过增加得慢而已,所以我加入了内存释放
 
这样释放内存,不是解决问题吧
 
[:(]但我不知道如何去释放啊,救命啊help
 
windows你根本没办法精确延时的,本身给你的时间精度就不够
改用timer或者干脆改成空循环若干次,可能就行了
同时支持下UFO~
windows你拖动某个窗口,别松开,过2,3秒,你的延时就乱掉了,在这个平台搞实时控制,简直是......
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部