TThread::TSystemTimes - C++ Builder

C++ Builder 参考手册 ➙ TThread ➙ TSystemTimes


头文件:#include
命名空间:System::Classes
类:TThread
访问权限:public:
类型定义:

struct TSystemTimes
{
public:
    unsigned __int64 IdleTime;
    unsigned __int64 UserTime;
    unsigned __int64 KernelTime;
    unsigned __int64 NiceTime;
};

TSystemTimes 是 TThread 结构体类型成员,用于计算 CPU 使用率,可以用 GetSystemTimes 方法获取这个结构体的值。

成员 类型 说明
IdleTime unsigned __int64 系统空闲时间
UserTime unsigned __int64 处理用户进程的时间
KernelTime unsigned __int64 处理系统核心的时间
NiceTime unsigned __int64 处理 nice 用户进程的时间【注1】

【注1】某些操作系统的 root 用户可以用 nice 方式启动用户进程,可以设定进程的优先级,Windows 操作系统没有这种运行方式,NiceTime 等于 0。

计算 CPU 使用率的方法:

  • 总时间 = UserTime + KernelTime + NiceTime
  • 空闲时间 = IdleTime
  • 工作时间 = 总时间 - 空闲时间
  • 时间段长度 = 本次获取的总时间 - 上次获取的总时间
  • 此段时间空闲 = 本次获取的空闲时间 - 上次获取的空闲时间
  • 此段时间工作 = 时间段长度 - 此段时间空闲
  • 此段时间 CPU 使用率 = 此段时间工作 / 时间段长度

这些计算 GetCPUUsage 方法已经处理好了,可以使用 GetSystemTimes 获取初始值,然后每次调用 GetCPUUsage 获取初始值到本次调用、或者两次调用 GetCPUUsage 之间的 CPU 使用率。


例1:通过计算的方法获取并且实时显示 CPU 使用率

在窗口上放一个定时器控件 Timer1,一个文字标签控件 Label1,和一个进度条控件 ProgressBar1:

窗口上放的控件

在 .h 文件里面,TForm1 类的 private: 部分添加变量:

private: // User declarations
    TThread::TSystemTimes SysTimes;

在 TForm1 的构造函数和定时器的 OnTimer 时间里面分别写如下代码:

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    TThread::GetSystemTimes(SysTimes);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    TThread::TSystemTimes t;
    TThread::GetSystemTimes(t);

    // 计算两次获取 TThread::TSystemTimes 经过的时间
    long long llElapsed = (t.UserTime + t.KernelTime + t.NiceTime)
                        - (SysTimes.UserTime + SysTimes.KernelTime + SysTimes.NiceTime);

    if(llElapsed > 0)
    {
        long long llIdle = t.IdleTime - SysTimes.IdleTime; // 空闲时间
        long long llWork = llElapsed - llIdle;             // 工作时间
        int iCpuRate = llWork * 100.0 / llElapsed + 0.5;   // CPU 使用率
        Label1->Caption = String().sprintf(L"CPU 使用率:%d%%", iCpuRate);
        ProgressBar1->Position = iCpuRate;
    }

    SysTimes = t;
}

运行结果:

实时显示 CPU 使用率:运行结果

例2:使用 TThread::GetCPUUsage 计算 CPU 使用率

请参考 TThread::GetCPUUsage 的例子。


相关:

  • System::Classes::TThread::GetSystemTimes
  • System::Classes::TThread::GetCPUUsage
  • System::Classes::TThread::IsSingleProcessor
  • System::Classes::TThread::ProcessorCount
  • System::Classes::TThread
  • System::TObject
  • VCL 类继承关系

C++ Builder 参考手册 ➙ TThread ➙ TSystemTimes

你可能感兴趣的:(TThread::TSystemTimes - C++ Builder)