CPU使用百分比值
CPU Percentage use value
注意(不是我的代码):SOURCE页面底部由Sayed Mohsen Zahraee制作。我在帖子中做了一些小改动,但他的原始代码很快就可以工作了。
在尝试了解这些代码是如何工作的同时,我还试图找到一种方法,当通过if语句满足某个参数时,触发一个操作,从而获得最终输出。
#include <iostream>
#include <windows.h>
#include <stdio.h>
void GetSystemTimesAddress();
CHAR cpuusage();
int main(void)
{
int n;
GetSystemTimesAddress();
for(n=0;n<20;n++)
{
printf("CPU Usage: %3d%%r",cpuusage());
Sleep(2000);
if ((printf("%3d%%r",cpuusage())) = '10')//Doesn't work but goal action
{
std::cout << "just fine";
}
if ((printf("%3d%%r",cpuusage())) = '30')
{
std::cout << "keep an eye on";
}
if ((printf("%3d%%r",cpuusage())) = '50')
{
std::cout << "getting warm";
}
if ((printf("%3d%%r",cpuusage())) = '70')
{
std::cout << "pretty dangerous";
}
}
printf("n");
return 0;
}
//Bellow CPU usage meathods
CHAR cpuusage(void);
typedef BOOL ( __stdcall * pfnGetSystemTimes)( LPFILETIME lpIdleTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime );
static pfnGetSystemTimes s_pfnGetSystemTimes = NULL;
static HMODULE s_hKernel = NULL;
void GetSystemTimesAddress()
{
if( s_hKernel == NULL )
{
s_hKernel = LoadLibrary( L"Kernel32.dll" );
if( s_hKernel != NULL )
{
s_pfnGetSystemTimes = (pfnGetSystemTimes)GetProcAddress( s_hKernel, "GetSystemTimes" );
if( s_pfnGetSystemTimes == NULL )
{
FreeLibrary( s_hKernel ); s_hKernel = NULL;
}
}
}
}
// cpuusage(void)
// Return a CHAR value in the range 0 - 100 representing actual CPU usage in percent.
CHAR cpuusage()
{
FILETIME ft_sys_idle;
FILETIME ft_sys_kernel;
FILETIME ft_sys_user;
ULARGE_INTEGER ul_sys_idle;
ULARGE_INTEGER ul_sys_kernel;
ULARGE_INTEGER ul_sys_user;
static ULARGE_INTEGER ul_sys_idle_old;
static ULARGE_INTEGER ul_sys_kernel_old;
static ULARGE_INTEGER ul_sys_user_old;
CHAR usage = 0;
// we cannot directly use GetSystemTimes on C language
/* add this line :: pfnGetSystemTimes */
s_pfnGetSystemTimes(&ft_sys_idle, /* System idle time */
&ft_sys_kernel, /* system kernel time */
&ft_sys_user); /* System user time */
CopyMemory(&ul_sys_idle , &ft_sys_idle , sizeof(FILETIME)); // Could been optimized away...
CopyMemory(&ul_sys_kernel, &ft_sys_kernel, sizeof(FILETIME)); // Could been optimized away...
CopyMemory(&ul_sys_user , &ft_sys_user , sizeof(FILETIME)); // Could been optimized away...
usage =
(
(
(
(
(ul_sys_kernel.QuadPart - ul_sys_kernel_old.QuadPart)+
(ul_sys_user.QuadPart - ul_sys_user_old.QuadPart)
)
-
(ul_sys_idle.QuadPart-ul_sys_idle_old.QuadPart)
)
*
(100)
)
/
(
(ul_sys_kernel.QuadPart - ul_sys_kernel_old.QuadPart)+
(ul_sys_user.QuadPart - ul_sys_user_old.QuadPart)
)
);
ul_sys_idle_old.QuadPart = ul_sys_idle.QuadPart;
ul_sys_user_old.QuadPart = ul_sys_user.QuadPart;
ul_sys_kernel_old.QuadPart = ul_sys_kernel.QuadPart;
return usage;
}
如果有人找到了使If雄蕊工作的方法,你能简要解释一下它是如何工作的吗。我知道这样的事情很难用一两段简单的话来解释,但即使是简单的事情也是一个很好的学习机会。非常感谢。
当您想要进行比较时,您正在分配。这是Stack上的一个常见问题。您还试图比较从printf
返回的内容。此外,您正在尝试从两个字符中生成一个字符。'10'
无效。它可能是一个C字符串"10"
,但很可能您想要一个int
。更改if's from:
if ((printf("%3d%%r",cpuusage())) = '10')
至
if(cpuusage() == 10)
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 如何禁用 CPU 的无序执行
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 获取 2 个数字之间的差异百分比
- 分别测量每个线程上花费的 CPU 时间(C++)
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 您选择的 CPU 不支持 x86-64 指令集
- 如何降低应用程序的 CPU 使用率?
- 对于 CPU 无法原子操作的类型,std::atomic 有什么意义?
- 如何区分CPU和内存瓶颈?
- 如何以编程方式获取任务管理器进程CPU使用率(不是PerfMon API)
- 在一定范围内生成随机数,其中一定百分比为特定值
- CPU 如何提供memory_order_acquire保证?
- 规格CPU基准测试中各种浮点操作的百分比
- 正在使用C++检索Windows中的CPU负载百分比总数
- 如何使用 Sigar 库获取C++ CPU 使用率百分比