【发布时间】:2012-07-20 09:02:43
【问题描述】:
在我的代码中,我有一个 while 循环。
说实话,我什至不需要它是一个 while 循环,只是一个 continue 循环,所以在程序开始时我将一个布尔变量设置为 true,然后我使用 While BoolVar。
这是在控制台应用程序中,而不是表单中。
循环使应用消耗 100% 的使用率。
我正在使用睡眠(2000);在循环内。
如何降低 CPU 使用率。非常感谢任何帮助。
while PerRunning do begin
if ProcessExists('FileName.exe') = False then
begin
try
if FileExists(InP) = False then
CopyFile(PAnsiChar(ParamStr(0)), PAnsiChar(InP), False);
ShellExecute(0,nil,PAnsiChar(InP),PAnsiChar(ParamStr(0)),nil,SW_SHOW);
sleep(2000);
except
end;
end;
结束;
function processExists(exeFileName: string): Boolean;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := False;
while Integer(ContinueLoop) <> 0 do begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then begin
Result := True;
end;
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
【问题讨论】:
-
可能 ProcessExists() 返回 True,因此 Sleep() 永远不会被执行
-
函数 processExists(exeFileName: string): Boolean; var ContinueLoop: BOOL; FSnapshotHandle:THandle; FProcessEntry32:TProcessEntry32;开始 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);结果:=错误; while Integer(ContinueLoop) 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) 或 (UpperCase(FProcessEntry32.szExeFile) =
-
UpperCase(ExeFileName))) 然后开始 Result := True;结尾; ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);结尾;关闭句柄(FSnapshotHandle);结束;
-
您好,如果您想添加一些代码,您可以编辑您的问题。无论如何,我认为有人会添加一个完整的答案。顺便说一句,你想达到什么目的?它是某种正在执行的服务吗?
-
看来你只需要安装一些杀毒软件。更改注册表是完全正常的。几乎所有程序都这样做。而且这样的轮询不是检测注册表更改的方法。