CreateToolhelp32Snapshot与内存泄露?(100分)

  • 主题发起人 主题发起人 qiuxueting
  • 开始时间 开始时间
Q

qiuxueting

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi5 代码如下,列出系统应用进程标识。
发现有一个问题:CreateToolhelp32Snapshot 每执行一次,内存就减少4K或8K,如果我在
程序中由Timer定时检查某一个进程是否存在,那么,最终将耗尽我的全部内存。
请教各位,如何解决这个的内存消耗问题?

procedure TForm1.Button1Click(Sender: TObject);
var
; pProcessID ; ; ;:DWORD;
; ContinueLoop ; ;: BOOL;
; FSnapshotHandle : THandle;
; FProcessEntry32 : TProcessEntry32;
begin
; FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);// <- 问题之处

; FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
; ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
; ListBox1.Clear;
; while ContinueLoop do begin
; ; pProcessID := FProcessEntry32.th32ProcessID;
; ; ListBox1.Items.Append(inttostr(pProcessID));
; ; ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
; end;
end;
 
看一下CreateToolhelp32Snapshot函数的帮助你就可发现问题了,这是帮助中的最后一句:
To destroy the snapshot, use the CloseHandle function.
也就是说用完了CreateToolhelp32Snapshot函数后要用CloseHandle来释放内存。
试一下在程序最后加上这句:
CloseHandle(FSnapshotHandle);
 
接受答案了.
 
后退
顶部