C++ Builder 參考手冊 ? TThread ? TSystemTimes
頭文件:#include <System.Classes.hpp>
命名空間:System::Classes
類:TThread
訪問權(quán)限:public:
類型定義:
struct TSystemTimes
{
public:
unsigned __int64 IdleTime;
unsigned __int64 UserTime;
unsigned __int64 KernelTime;
unsigned __int64 NiceTime;
};
TSystemTimes 是 TThread 結(jié)構(gòu)體類型成員师抄,用于計算 CPU 使用率莽龟,可以用 GetSystemTimes 方法獲取這個結(jié)構(gòu)體的值十偶。
成員 | 類型 | 說明 |
---|---|---|
IdleTime | unsigned __int64 | 系統(tǒng)空閑時間 |
UserTime | unsigned __int64 | 處理用戶進程的時間 |
KernelTime | unsigned __int64 | 處理系統(tǒng)核心的時間 |
NiceTime | unsigned __int64 | 處理 nice 用戶進程的時間【注1】 |
【注1】某些操作系統(tǒng)的 root 用戶可以用 nice 方式啟動用戶進程瓢棒,可以設(shè)定進程的優(yōu)先級秀睛,Windows 操作系統(tǒng)沒有這種運行方式危融,NiceTime 等于 0迂求。
計算 CPU 使用率的方法:
- 總時間 = UserTime + KernelTime + NiceTime
- 空閑時間 = IdleTime
- 工作時間 = 總時間 - 空閑時間
- 時間段長度 = 本次獲取的總時間 - 上次獲取的總時間
- 此段時間空閑 = 本次獲取的空閑時間 - 上次獲取的空閑時間
- 此段時間工作 = 時間段長度 - 此段時間空閑
- 此段時間 CPU 使用率 = 此段時間工作 / 時間段長度
這些計算 GetCPUUsage 方法已經(jīng)處理好了霞怀,可以使用 GetSystemTimes 獲取初始值传货,然后每次調(diào)用 GetCPUUsage 獲取初始值到本次調(diào)用屎鳍、或者兩次調(diào)用 GetCPUUsage 之間的 CPU 使用率。
例1:通過計算的方法獲取并且實時顯示 CPU 使用率
在窗口上放一個定時器控件 Timer1问裕,一個文字標簽控件 Label1逮壁,和一個進度條控件 ProgressBar1:
在 .h 文件里面,TForm1 類的 private: 部分添加變量:
private: // User declarations
TThread::TSystemTimes SysTimes;
在 TForm1 的構(gòu)造函數(shù)和定時器的 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 經(jīng)過的時間
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;
}
運行結(jié)果:
例2:使用 TThread::GetCPUUsage 計算 CPU 使用率
?? 請參考 TThread::GetCPUUsage 的例子粮宛。
相關(guān):
- System::Classes::TThread::GetSystemTimes
- System::Classes::TThread::GetCPUUsage
- System::Classes::TThread::IsSingleProcessor
- System::Classes::TThread::ProcessorCount
- System::Classes::TThread
- System::TObject
- VCL 類繼承關(guān)系
C++ Builder 參考手冊 ? TThread ? TSystemTimes