程序运行一段时间后自动退出。寻求原因

zywhao 2006-07-02 06:46:37
我编写了一个IC卡地磅称重的软件,其中有一个单独的服务是在称的仪表中取数和检测是否有卡在刷。

我通过一个定时器来不断的对仪表传统送过来的数据进行分析。并显示在窗体上,

然后我又弄了一个定时器。每隔一秒钟检测一下有没有刷卡。如果有卡在刷,那就执行刷卡的操作。

上面的功能我都通过定时器来实现了。数据也很准确。但是程序在运行一段时间后就会自动退出。

后来我分析了一下内存。原来内存在不段的增长,当长到一定的程序时程序就会自动的退出了。

请问我应该怎么样改呢。才能让内存不再这样增长。

在定时器中定义的变量是这样的。帮我看一下为什么内存增长会那么快吧。谢谢啦。

代码:
procedure Tform_bangcheng.Timer2Timer(Sender: TObject);
var
i:integer;
DataByte:array[0..CACHE] of Byte;
nBytesRead:LongWORD ;
dwError:LongWORD ;
cs:TCOMSTAT;
gBufferLength: integer;
sCurrentContent : string;
iCurrentContent : integer;

begin
........
end;

procedure Tform_bangcheng.Timer4Timer(Sender: TObject);
var
byteCardType : pbyte;
intStatues : integer ;
begin
intStatues:=DC_AutoTestCard(byteCardType); //判断卡是否存在。=0:存在 否则不存在;
.....
END;
...全文
573 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzhechange 2006-07-05
  • 打赏
  • 举报
回复
我觉得要实现检测有没有刷卡不应该用定时器,而是开辟一个线程去实现。
定时器的弱点是太消耗主线程的资源,可能会影响整个应用程序的执行,如果定时器的代码有误,整个程序都可能不能运行;开辟一个线程执行检测卡是否存在的代码,就算你开辟的线程的代码有误,也不会影响整个程序的运行,最多这个模块不能用而已。
diablobaal 2006-07-04
  • 打赏
  • 举报
回复
你在运行下一个timer时,上一个timer一定要关闭
zywhao 2006-07-04
  • 打赏
  • 举报
回复
谢谢,,我试一下吧。
wudi_1982 2006-07-04
  • 打赏
  • 举报
回复
弄个线程,不要用timer。
erhan 2006-07-04
  • 打赏
  • 举报
回复
内存泄露比较难找,你提供的代码太少,看不出什么来。请注意create后需要destroy,等等。
QQgenie 2006-07-04
  • 打赏
  • 举报
回复
//清内存
procedure TForm1.ClearMemory;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
application.ProcessMessages;
end;
end;
放在timer中,5秒一次,死循环,效果不错

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧