青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

來(lái)吧,朋友!

為C++瘋狂

C++編程實(shí)現(xiàn)計(jì)算CPU占用率

起學(xué)習(xí) NT/2000方法:

#include <windows.h>
#include <conio.h>
#include <stdio.h>

#define SystemBasicInformation 0
#define SystemPerformanceInformation 2
#define SystemTimeInformation 3

#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 (double)((x).LowPart))

typedef struct
{
DWORD dwUnknown1;
ULONG uKeMaximumIncrement;
ULONG uPageSize;
ULONG uMmNumberOfPhysicalPages;
ULONG uMmLowestPhysicalPage;
ULONG uMmHighestPhysicalPage;
ULONG uAllocationGranularity;
PVOID pLowestUserAddress;
PVOID pMmHighestUserAddress;
ULONG uKeActiveProcessors;
BYTE bKeNumberProcessors;
BYTE bUnknown2;
WORD wUnknown3;
} SYSTEM_BASIC_INFORMATION;

typedef struct
{
LARGE_INTEGER liIdleTime;
DWORD dwSpare[76];
} SYSTEM_PERFORMANCE_INFORMATION;

typedef struct
{
LARGE_INTEGER liKeBootTime;
LARGE_INTEGER liKeSystemTime;
LARGE_INTEGER liExpTimeZoneBias;
ULONG uCurrentTimeZoneId;
DWORD dwReserved;
} SYSTEM_TIME_INFORMATION;


// ntdll!NtQuerySystemInformation (NT specific!)
//
// The function copies the system information of the
// specified type into a buffer
//
// NTSYSAPI
// NTSTATUS
// NTAPI
// NtQuerySystemInformation(
// IN UINT SystemInformationClass, // information type
// OUT PVOID SystemInformation, // pointer to buffer
// IN ULONG SystemInformationLength, // buffer size in bytes
// OUT PULONG ReturnLength OPTIONAL // pointer to a 32-bit
// // variable that receives
// // the number of bytes
// // written to the buffer
// );
typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);

PROCNTQSI NtQuerySystemInformation;


void main(void)
{
SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo;
SYSTEM_TIME_INFORMATION SysTimeInfo;
SYSTEM_BASIC_INFORMATION SysBaseInfo;
double dbIdleTime;
double dbSystemTime;
LONG status;
LARGE_INTEGER liOldIdleTime = {0,0};
LARGE_INTEGER liOldSystemTime = {0,0};

NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(
GetModuleHandle("ntdll"),
"NtQuerySystemInformation"
);

if (!NtQuerySystemInformation)
return;

// get number of processors in the system
status = NtQuerySystemInformation(SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL);
if (status != NO_ERROR)
return;

printf("\nCPU Usage (press any key to exit): ");
while(!_kbhit())
{
// get new system time
status = NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0);
if (status!=NO_ERROR)
return;

// get new CPU's idle time
status = NtQuerySystemInformation(SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL);
if (status != NO_ERROR)
return;

// 本文轉(zhuǎn)自 C Builder研究 - http://www.ccrun.com/article.asp?i=424&d=7jw23a
// if it's a first call - skip it
if (liOldIdleTime.QuadPart != 0)
{
// CurrentValue = NewValue - OldValue
dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);

// CurrentCpuIdle = IdleTime / SystemTime
dbIdleTime = dbIdleTime / dbSystemTime;

// CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors
dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors 0.5;

printf("\b\b\b\b=%%",(UINT)dbIdleTime);
}

// store new CPU's idle and system time
liOldIdleTime = SysPerfInfo.liIdleTime;
liOldSystemTime = SysTimeInfo.liKeSystemTime;

// wait one second
Sleep(1000);
}
printf("\n");
}

//-------------------------------------------------------------

W9X:
#include <windows.h>
#include <conio.h>
#include <stdio.h>

void main(void)
{
HKEY hkey;
DWORD dwDataSize;
DWORD dwType;
DWORD dwCpuUsage;

// starting the counter
if ( RegOpenKeyEx( HKEY_DYN_DATA,
"PerfStats\\StartStat",
0,KEY_ALL_ACCESS,
&hkey ) != ERROR_SUCCESS)
return;

dwDataSize=sizeof(DWORD);
RegQueryValueEx( hkey,
"KERNEL\\CPUUsage",
NULL,&dwType,
(LPBYTE)&dwCpuUsage,
&dwDataSize );

RegCloseKey(hkey);

// geting current counter's value
if ( RegOpenKeyEx( HKEY_DYN_DATA,
"PerfStats\\StatData",
0,KEY_READ,
&hkey ) != ERROR_SUCCESS)
return;

printf("\nCPU Usage (press any key to exit): ");
while(!_kbhit())
{
dwDataSize=sizeof(DWORD);
RegQueryValueEx( hkey,
"KERNEL\\CPUUsage",
NULL,&dwType,
(LPBYTE)&dwCpuUsage,
&dwDataSize );
Sleep(500);
printf("\b\b\b\b=%%",dwCpuUsage);
}
printf("\n");

RegCloseKey(hkey);

// stoping the counter
if ( RegOpenKeyEx( HKEY_DYN_DATA,
"PerfStats\\StopStat",
0,KEY_ALL_ACCESS,
&hkey ) != ERROR_SUCCESS)
return;

dwDataSize=sizeof(DWORD);
RegQueryValueEx( hkey,
"KERNEL\\CPUUsage",
NULL,&dwType,
(LPBYTE)&dwCpuUsage,
&dwDataSize );

RegCloseKey(hkey);
} NT/2000方法:

#include <windows.h>
#include <conio.h>
#include <stdio.h>

#define SystemBasicInformation 0
#define SystemPerformanceInformation 2
#define SystemTimeInformation 3

#define Li2Double(x) ((double)((x).HighPart) * 4.294967296E9 (double)((x).LowPart))

typedef struct
{
DWORD dwUnknown1;
ULONG uKeMaximumIncrement;
ULONG uPageSize;
ULONG uMmNumberOfPhysicalPages;
ULONG uMmLowestPhysicalPage;
ULONG uMmHighestPhysicalPage;
ULONG uAllocationGranularity;
PVOID pLowestUserAddress;
PVOID pMmHighestUserAddress;
ULONG uKeActiveProcessors;
BYTE bKeNumberProcessors;
BYTE bUnknown2;
WORD wUnknown3;
} SYSTEM_BASIC_INFORMATION;

typedef struct
{
LARGE_INTEGER liIdleTime;
DWORD dwSpare[76];
} SYSTEM_PERFORMANCE_INFORMATION;

typedef struct
{
LARGE_INTEGER liKeBootTime;
LARGE_INTEGER liKeSystemTime;
LARGE_INTEGER liExpTimeZoneBias;
ULONG uCurrentTimeZoneId;
DWORD dwReserved;
} SYSTEM_TIME_INFORMATION;


// ntdll!NtQuerySystemInformation (NT specific!)
//
// The function copies the system information of the
// specified type into a buffer
//
// NTSYSAPI
// NTSTATUS
// NTAPI
// NtQuerySystemInformation(
// IN UINT SystemInformationClass, // information type
// OUT PVOID SystemInformation, // pointer to buffer
// IN ULONG SystemInformationLength, // buffer size in bytes
// OUT PULONG ReturnLength OPTIONAL // pointer to a 32-bit
// // variable that receives
// // the number of bytes
// // written to the buffer
// );
typedef LONG (WINAPI *PROCNTQSI)(UINT,PVOID,ULONG,PULONG);

PROCNTQSI NtQuerySystemInformation;


void main(void)
{
SYSTEM_PERFORMANCE_INFORMATION SysPerfInfo;
SYSTEM_TIME_INFORMATION SysTimeInfo;
SYSTEM_BASIC_INFORMATION SysBaseInfo;
double dbIdleTime;
double dbSystemTime;
LONG status;
LARGE_INTEGER liOldIdleTime = {0,0};
LARGE_INTEGER liOldSystemTime = {0,0};

NtQuerySystemInformation = (PROCNTQSI)GetProcAddress(
GetModuleHandle("ntdll"),
"NtQuerySystemInformation"
);

if (!NtQuerySystemInformation)
return;

// get number of processors in the system
status = NtQuerySystemInformation(SystemBasicInformation,&SysBaseInfo,sizeof(SysBaseInfo),NULL);
if (status != NO_ERROR)
return;

printf("\nCPU Usage (press any key to exit): ");
while(!_kbhit())
{
// get new system time
status = NtQuerySystemInformation(SystemTimeInformation,&SysTimeInfo,sizeof(SysTimeInfo),0);
if (status!=NO_ERROR)
return;

// get new CPU's idle time
status = NtQuerySystemInformation(SystemPerformanceInformation,&SysPerfInfo,sizeof(SysPerfInfo),NULL);
if (status != NO_ERROR)
return;

// 本文轉(zhuǎn)自 C Builder研究 - http://www.ccrun.com/article.asp?i=424&d=7jw23a
// if it's a first call - skip it
if (liOldIdleTime.QuadPart != 0)
{
// CurrentValue = NewValue - OldValue
dbIdleTime = Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
dbSystemTime = Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);

// CurrentCpuIdle = IdleTime / SystemTime
dbIdleTime = dbIdleTime / dbSystemTime;

// CurrentCpuUsage% = 100 - (CurrentCpuIdle * 100) / NumberOfProcessors
dbIdleTime = 100.0 - dbIdleTime * 100.0 / (double)SysBaseInfo.bKeNumberProcessors 0.5;

printf("\b\b\b\b=%%",(UINT)dbIdleTime);
}

// store new CPU's idle and system time
liOldIdleTime = SysPerfInfo.liIdleTime;
liOldSystemTime = SysTimeInfo.liKeSystemTime;

// wait one second
Sleep(1000);
}
printf("\n");
}

//-------------------------------------------------------------

W9X:
#include <windows.h>
#include <conio.h>
#include <stdio.h>

void main(void)
{
HKEY hkey;
DWORD dwDataSize;
DWORD dwType;
DWORD dwCpuUsage;

// starting the counter
if ( RegOpenKeyEx( HKEY_DYN_DATA,
"PerfStats\\StartStat",
0,KEY_ALL_ACCESS,
&hkey ) != ERROR_SUCCESS)
return;

dwDataSize=sizeof(DWORD);
RegQueryValueEx( hkey,
"KERNEL\\CPUUsage",
NULL,&dwType,
(LPBYTE)&dwCpuUsage,
&dwDataSize );

RegCloseKey(hkey);

// geting current counter's value
if ( RegOpenKeyEx( HKEY_DYN_DATA,
"PerfStats\\StatData",
0,KEY_READ,
&hkey ) != ERROR_SUCCESS)
return;

printf("\nCPU Usage (press any key to exit): ");
while(!_kbhit())
{
dwDataSize=sizeof(DWORD);
RegQueryValueEx( hkey,
"KERNEL\\CPUUsage",
NULL,&dwType,
(LPBYTE)&dwCpuUsage,
&dwDataSize );
Sleep(500);
printf("\b\b\b\b=%%",dwCpuUsage);
}
printf("\n");

RegCloseKey(hkey);

// stoping the counter
if ( RegOpenKeyEx( HKEY_DYN_DATA,
"PerfStats\\StopStat",
0,KEY_ALL_ACCESS,
&hkey ) != ERROR_SUCCESS)
return;

dwDataSize=sizeof(DWORD);
RegQueryValueEx( hkey,
"KERNEL\\CPUUsage",
NULL,&dwType,
(LPBYTE)&dwCpuUsage,
&dwDataSize );

RegCloseKey(hkey);
}

posted on 2009-07-22 18:11 yanghaibao 閱讀(1366) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++開(kāi)發(fā)工具

導(dǎo)航

<2025年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

統(tǒng)計(jì)

常用鏈接

留言簿

隨筆分類

隨筆檔案

文章檔案

收藏夾

Good blogs

搜索

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品qvod| 欧美日韩专区在线| 黄色av一区| 久久亚洲春色中文字幕久久久| 亚洲视频在线观看网站| 欧美日韩理论| 亚洲欧美日韩国产一区二区三区| 亚洲激情在线播放| 欧美日韩国产欧| 亚洲欧美激情诱惑| 午夜精品国产| 亚洲第一精品电影| 亚洲国产另类久久精品| 欧美日韩精品免费观看| 午夜久久久久| 欧美中文字幕视频| 亚洲国产日韩综合一区| 亚洲精品欧美在线| 国产欧美精品一区| 久久亚洲综合色| 欧美国产日本| 欧美亚洲在线播放| 久久久久久久久久久久久久一区 | 美国成人直播| 亚洲精品精选| 亚洲男同1069视频| 91久久精品国产91久久性色| 一本久道综合久久精品| 国产亚洲欧美一区二区| 亚洲成人在线视频播放 | 99在线观看免费视频精品观看| 国产精品久久久久久久9999| 久久综合色88| 国产精品高潮视频| 欧美激情第10页| 国产欧美精品日韩| 亚洲国产婷婷| 国产一区二区高清视频| 亚洲肉体裸体xxxx137| 国产欧美日韩一区| 亚洲国产毛片完整版 | 国产亚洲欧美日韩一区二区| 亚洲高清免费视频| 国产亚洲一区二区三区在线观看| 最新国产乱人伦偷精品免费网站| 国产精品区免费视频| 亚洲国产精品99久久久久久久久| 国产日韩精品一区二区三区在线| 亚洲国产色一区| 经典三级久久| 欧美一区二区高清| 欧美一区=区| 国产精品啊v在线| 91久久极品少妇xxxxⅹ软件| 极品尤物一区二区三区| 亚洲一区欧美二区| 在线视频精品| 欧美成人精品不卡视频在线观看| 快射av在线播放一区| 国产日韩一区二区三区在线播放| 一区二区成人精品| 亚洲午夜羞羞片| 欧美日韩18| 亚洲裸体俱乐部裸体舞表演av| 亚洲国产精品第一区二区三区| 欧美在线观看视频一区二区| 欧美一级专区| 国产视频在线观看一区二区三区| 在线视频你懂得一区| 一本久久a久久免费精品不卡 | 亚洲激情视频网| 亚洲国产二区| 免费在线看一区| 亚洲国产天堂久久综合网| 亚洲黄色毛片| 欧美精品一线| 在线视频亚洲| 久久精品国内一区二区三区| 国产三级欧美三级| 久久精品天堂| 亚洲福利久久| 亚洲视频在线观看| 国产精品资源| 久久手机免费观看| 亚洲激情在线激情| 亚洲一级二级在线| 国产日韩欧美一二三区| 久久精品男女| 亚洲高清资源| 亚洲一区三区电影在线观看| 国产精品综合| 久久只有精品| av成人免费在线观看| 欧美一区二区在线播放| 尤物九九久久国产精品的特点 | 午夜视频久久久| 美女视频黄免费的久久| 亚洲美女av网站| 国产日韩欧美精品在线| 久久久久中文| 99日韩精品| 久久在线视频| 亚洲一级黄色| 伊甸园精品99久久久久久| 欧美成人蜜桃| 欧美一级二级三级蜜桃| 亚洲激情视频在线播放| 欧美在线网站| 99热这里只有成人精品国产| 国产精品老女人精品视频| 久久蜜桃资源一区二区老牛| 亚洲另类自拍| 蜜臀av一级做a爰片久久| 亚洲一级片在线看| 亚洲黄色影片| 国内成人自拍视频| 国产精品jizz在线观看美国| 久久精品网址| 亚洲尤物精选| 日韩一区二区免费高清| 免费亚洲一区| 久久精品国内一区二区三区| 99精品视频免费| 亚洲国产欧美日韩| 国内精品美女在线观看| 国产精品久久久久久久午夜| 欧美高清在线播放| 久久女同互慰一区二区三区| 亚洲香蕉视频| 99精品国产99久久久久久福利| 欧美不卡一卡二卡免费版| 久久精彩视频| 午夜亚洲福利| 亚洲欧美国产不卡| 国产精品99久久久久久有的能看| 亚洲三级电影在线观看| 影音先锋久久| 一区二区三区在线免费视频| 国产精品日韩久久久久| 欧美视频在线观看视频极品 | 亚洲视频一二区| 亚洲精品在线观看免费| 亚洲缚视频在线观看| 欧美大片在线看| 蜜桃av综合| 女人香蕉久久**毛片精品| 久久亚洲一区二区三区四区| 久久精品青青大伊人av| 欧美一区二区三区在线观看视频| 亚洲一二三区在线| 亚洲一区二区三区视频| 亚洲一区二区3| 亚洲综合日韩在线| 欧美一区二区三区视频免费| 香蕉久久国产| 久久九九国产| 欧美成人午夜激情| 亚洲高清视频在线观看| 亚洲国产精品一区二区www| 亚洲黄色在线| 99成人精品| 亚洲欧美日韩视频二区| 午夜在线成人av| 久久一区中文字幕| 欧美大片免费观看| 欧美日韩综合视频网址| 国产精品一区二区久久久久| 国产日韩视频一区二区三区| 国语自产在线不卡| 亚洲人成免费| 亚洲免费在线观看| 久久蜜桃资源一区二区老牛| 免费观看亚洲视频大全| 91久久极品少妇xxxxⅹ软件| 一本色道久久综合亚洲精品婷婷| 亚洲在线观看视频| 久久一区中文字幕| 欧美日韩中文字幕在线| 国产亚洲精品7777| 亚洲精品永久免费精品| 亚洲一区在线直播| 久久久精品国产一区二区三区| 欧美高清自拍一区| 亚洲天天影视| 免费亚洲电影在线观看| 国产精品久久久久久久一区探花| 韩国av一区二区三区四区| 99pao成人国产永久免费视频| 欧美亚洲系列| 亚洲韩国精品一区| 欧美中文在线视频| 欧美性大战xxxxx久久久| 一区在线免费观看| 亚洲欧美www| 亚洲国产高清在线观看视频| 亚洲欧美日韩精品久久奇米色影视| 久久夜色精品国产欧美乱| 国产美女精品| 在线一区二区三区做爰视频网站 | 欧美成人精品|