Multithreading 在线程中读取INI文件而不占用CPU时间
如何在线程中读取Multithreading 在线程中读取INI文件而不占用CPU时间,multithreading,delphi,ini,Multithreading,Delphi,Ini,如何在线程中读取.ini文件而不消耗如此多的CPU时间?线程将在运行时运行,这意味着while true不会延迟 搜索.ini上的值的代码为: var Leitura : TIniFile; begin Result := False; Leitura := TIniFile.Create('File.ini'); if Leitura.ValueExists('KEY', ValueToSearch) then Result := True; Leitura.Free
.ini
文件而不消耗如此多的CPU时间?线程将在运行时运行,这意味着while true不会延迟
搜索.ini上的值的代码为:
var
Leitura : TIniFile;
begin
Result := False;
Leitura := TIniFile.Create('File.ini');
if Leitura.ValueExists('KEY', ValueToSearch) then Result := True;
Leitura.Free;
但是,由于此函数在无限循环中运行,它会消耗CPU时间,因此我需要解决此问题。您可以使用API监视文件的更改,并仅在文件更改时检查值,而不是连续轮询.INI文件的更改。Delphi版本在单元
ShellCtrls.pas
中包含一个组件TShellChangeNotifier
,它是API函数的包装器。此外,还有一篇文章介绍了如何使用WindowsAPI函数ReadDirectoryChangesW
“检索描述指定目录内更改的信息”。DelphiJCL还包含一个组件,用于监视文件和目录的更改。在Torry上,您最终可以找到一个组件,该组件允许监视文件/目录的更改,并在发生更改时触发事件。为什么要连续循环读取INI文件?您的高CPU使用率可能意味着您的线程在循环迭代之间不会向其他线程屈服。尝试在每次迭代中添加一个小的Sleep()
。尽管你可能会考虑找到另一个不需要像任何线程一样连续读取INI文件的解决方案,如果它不睡至少几毫秒,那么正如里米所说,它将消耗整个CPU内核。在慢速磁盘上创建一个巨大的INI,如果控制器允许的话,禁用读缓存。然后,您可以用磁盘垃圾代替cpu使用率。或者,试着问这个问题。我通过阅读来检查.ini或no上是否存在一个键。这个例程用于检查windows句柄的循环,以确定某个特定句柄是否打开。ini或no。这不是你问题的解决方案。我已经用过他在粘贴上的其他解决方案。我将与他或IPC一起尝试。