上一篇文章中介绍了如何在 Delphi 中创建 Linux 守护进程,而这篇文章则试图将上文的操作简单化,不要再去考虑那么多事事非非。 【基础入门】 1、引入 qconsole_looper.pas 单元,这个单元本身原来是为了能够在控制台程序中运行主线程函数而引入的,换句话说,引用它后可以保证 QWorker 在控制
标签: 进程
[教程]以管理员身份运行程序的一种方法
以管理员运行程序的方法有很多种,包含在 manifest 文件中请求权限,兼容性设置及下面说的 runas。 runas 算是一种比较另类的方法,它是通过重新启动程序以管理员方式运行的方式来让新的进程以管理员方式运行,然后退出当前进程,以达到以管理员身份运行的目的。 要执行这个操作实际上很简单,用众所周知的 Shell
[教程]枚举指定进程的所有窗口
实际上,这个的核心是用于一个 GetWindowThreadProcess 的 API 函数,通过它可以确定指定的窗口所隶属的进程。然后,结合 EnumWindows 就可以完成这一操作了。假设我们将所有的窗口句柄到一个 TList 中,我们大概的代码逻辑如下: [crayon-62c6b5a32dd797037764
获得当前进程/线程 CPU 使用率
有时候,我们需要排除其它进程的影响,单看自己的进程的CPU占用率,而不是整个系统的CPU占用率,那么我们该如何看呢?Windows 提供了一个 API GetProcessTimes 来获得进程的使用时间信息,我们简单封装了下提供给大家:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
type TProcessCpuUsage = record private FLastUsed, FLastTime: Int64; FCpuCount:Integer; public class function Create: TProcessCpuUsage; static; function Current: Single; end; var ProcessCpuUsage: TProcessCpuUsage = (FLastUsed: 0; FLastTime: 0;FCpuCount:0); { TProcessCpuUsage } class function TProcessCpuUsage.Create: TProcessCpuUsage; begin Result.FLastTime := 0; Result.FLastUsed := 0; Result.FCpuCount := 0; end; function TProcessCpuUsage.Current: Single; var Usage, ACurTime: UInt64; CreateTime, ExitTime, IdleTime, UserTime, KernelTime: TFileTime; function FileTimeToI64(const ATime: TFileTime): Int64; begin Result := (Int64(ATime.dwHighDateTime) shl 32) + ATime.dwLowDateTime; end; function GetCPUCount: Integer; var SysInfo: TSystemInfo; begin GetSystemInfo(SysInfo); Result := SysInfo.dwNumberOfProcessors; end; begin Result := 0; if GetProcessTimes(GetCurrentProcess, CreateTime, ExitTime, KernelTime, UserTime) then begin ACurTime := GetTickCount; Usage := FileTimeToI64(UserTime) + FileTimeToI64(KernelTime); if FLastTime <> 0 then Result := (Usage - FLastUsed) / (ACurTime - FLastTime) / FCpuCount / 100 else FCpuCount:=GetCpuCount; FLastUsed := Usage; FLastTime := ACurTime; end; end; |
具体用法就很简