C++ 怎么实现获取当前PC 硬盘 内存的大小以及已使用大小,加上CPU使用率

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 怎么实现获取当前PC 硬盘 内存的大小以及已使用大小,加上CPU使用率相关的知识,希望对你有一定的参考价值。

我用的是VC6.0 哪位能够实现的麻烦给我说一下,最好是能够给我一个小程序(不能够给我大的) ,只要实现了提取以上数据就可以了,我可以再加分
对不起哈 还有硬盘的 我现在才发现 其实你完全可以给我说在哪儿去找这些API 找到之后我就完全可以自己写了,谢谢 假如能够给我说的话,至于CPU,我已经自己实现了,是用的固定时间内的空闲时间来实现的,还是很感谢你,我再等一下

可以通过编程实现,源代码如下:
// Sample output:
// There is 51 percent of memory in use.
// There are 2029968 total KB of physical memory.
// There are 987388 free KB of physical memory.
// There are 3884620 total KB of paging file.
// There are 2799776 free KB of paging file.
// There are 2097024 total KB of virtual memory.
// There are 2084876 free KB of virtual memory.
// There are 0 free KB of extended memory.

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

// Use to convert bytes to KB
#define DIV 1024

// Specify the width of the field in which to print the numbers.
// The asterisk in the format specifier "%*I64d" takes an integer
// argument and uses it to pad and right justify the number.
#define WIDTH 7

void _tmain()

MEMORYSTATUSEX statex;

statex.dwLength = sizeof (statex);

GlobalMemoryStatusEx (&statex);

_tprintf (TEXT("There is %*ld percent of memory in use.\n"),
WIDTH, statex.dwMemoryLoad);
_tprintf (TEXT("There are %*I64d total KB of physical memory.\n"),
WIDTH, statex.ullTotalPhys/DIV);
_tprintf (TEXT("There are %*I64d free KB of physical memory.\n"),
WIDTH, statex.ullAvailPhys/DIV);
_tprintf (TEXT("There are %*I64d total KB of paging file.\n"),
WIDTH, statex.ullTotalPageFile/DIV);
_tprintf (TEXT("There are %*I64d free KB of paging file.\n"),
WIDTH, statex.ullAvailPageFile/DIV);
_tprintf (TEXT("There are %*I64d total KB of virtual memory.\n"),
WIDTH, statex.ullTotalVirtual/DIV);
_tprintf (TEXT("There are %*I64d free KB of virtual memory.\n"),
WIDTH, statex.ullAvailVirtual/DIV);

// Show the amount of extended memory available.

_tprintf (TEXT("There are %*I64d free KB of extended memory.\n"),
WIDTH, statex.ullAvailExtendedVirtual/DIV);


运行后结果就能获取当前PC的硬盘大小、已使用大小和CPU的使用率。追问

尼玛回答的太及时了吧,才那么短短五六年你就抢着回答了

参考技术A 您好~要用win API,
BOOL CSystemInfoDialog::OnInitDialog()

//对话框的初始化函数

CString DisplayString;

SYSTEM_INFO SystemInfo;

//检测CPU的类型

::GetSystemInfo(&&SystemInfo);

//WinAPI函数,用以取得系统信息

if (SystemInfo.wProcessorArchitecture = =

PROCESSOR_ARCHITECTURE_INTEL)

switch (SystemInfo.wProcessorLevel)

//本程序只演示取得Intel系列CPU的方法

……

//省略对386及486机器的检测

case 5:

DisplayString= "Pentium";

break;

case 6:

DisplayString ="Pentium (II/Pro)";

break;



m_CpuType.SetWindowText(DisplayString);

//变量m_CpuType是一个CStatic框

//检测内存状态

MEMORYSTATUS MemoryStatus;

//内存的现行状态结构

MemoryStatus.dwLength=sizeof(MEMORYSTATUS);

//填充结构的大小

::GlobalMemoryStatus(&&MemoryStatus);

//取得内存的状态

char buffer[20];

wsprintf(buffer,"%d bytes",MemoryStatus.dwTotalPhys);

//dwTotalPhys指示物理内存字节

m_Memory.SetWindowText(buffer);

//变量m_Memory是一个CStatic框

linux用
getrusage~

关于补充:
硬盘使用
GetDiskFreeSpace()
或者
GetDiskFreeSpaceEx()

您应该安装一个msdn~
或者到在线的msdn上查找~:
http://msdn.microsoft.com/zh-cn/default.aspx
参考技术B 获取硬盘空间,使用:
GetDiskFreeSpace或GetDiskFreeSpaceEx

获取内存状态,使用:
GlobalMemoryStatus或GlobalMemoryStatusEx

获取CPU使用率,使用:
NtQuerySystemInformation查询关于处理器性能(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)本回答被提问者采纳
参考技术C 上csdn里一大把。

尝试在 C++、MinGW 上获取当前进程内存大小时出错

【中文标题】尝试在 C++、MinGW 上获取当前进程内存大小时出错【英文标题】:Error when trying to get the current process memory size on C++, MinGW 【发布时间】:2016-07-27 12:39:08 【问题描述】:

当我尝试调用 GetProcessMemoryInfo 时出现错误: 对“GetProcessMemoryInfo”的未定义引用

我已经看到了这个问题:Undefined reference to getprocessmemoryinfo@12

但这并不能解决我的问题。

我想知道我的进程在 RAM 中的大小,因此我需要使用“GetProcessMemoryInfo”方法。

我的问题是当我这样做时链接会中断。

CmakeLists.txt:

project(maxpath)

set(dir $CMAKE_CURRENT_SOURCE_DIR)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "$dir/build")

set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -std=c++11 -static-libgcc -static-libstdc++ -static -m64 -lpsapi")

file( GLOB LIB_ALG algorithms/*.hpp )
file( GLOB LIB_DS datastructures/*.hpp )
file( GLOB LIB_LOG include/*.h)

set(GRID_GENERATOR
        $LIB_ALG
        $LIB_DS
        $LIB_LOG
        grid/generator.cpp
        grid/grid.hpp)

set(GRID_SOLVER
        $LIB_ALG
        $LIB_DS
        $LIB_LOG
        grid/main_grid.cpp
        grid/grid.hpp
        include/memory_helper.cpp include/memory_helper.hpp include/fnv.h)
add_executable(gridGenerator $GRID_GENERATOR)
add_executable(gridSolver $GRID_SOLVER)

你可以看到我使用了-lpsapi参数,

我得到的错误是:

[ 33%] Linking CXX executable "some path...\gridSolver.exe"
CMakeFiles\gridSolver.dir/objects.a(memory_helper.cpp.obj):memory_helper.cpp:(.text+0xf1): undefined reference to `GetProcessMemoryInfo'
CMakeFiles\gridSolver.dir/objects.a(memory_helper.cpp.obj):memory_helper.cpp:(.text+0x131): undefined reference to `GetProcessMemoryInfo'
C:/PROGRA~1/MINGW-~1/X86_64~1.3-P/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\gridSolver.dir/objects.a(memory_helper.cpp.obj): bad reloc address 0x0 in section `.pdata'
C:/PROGRA~1/MINGW-~1/X86_64~1.3-P/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [some path.../gridSolver.exe] Error 1
CMakeFiles\gridSolver.dir\build.make:121: recipe for target 'some path.../gridSolver.exe' failed
mingw32-make.exe[2]: *** [CMakeFiles/gridSolver.dir/all] Error 2
CMakeFiles\Makefile2:103: recipe for target 'CMakeFiles/gridSolver.dir/all' failed
mingw32-make.exe[1]: *** [CMakeFiles/gridSolver.dir/rule] Error 2
CMakeFiles\Makefile2:115: recipe for target 'CMakeFiles/gridSolver.dir/rule' failed
mingw32-make.exe: *** [gridSolver] Error 2
makefile:130: recipe for target 'gridSolver' failed

我正在使用 CLion 和 mingw-w64\x86_64-4.8.3-posix-seh-rt_v3-rev2\mingw64

还有其他方法吗(使用 psapi 除外)?

【问题讨论】:

【参考方案1】:

那里的答案是正确的。你应该链接到psapi

FIND_LIBRARY (PSAPI Psapi)
TARGET_LINK_LIBRARIES(gridSolver $PSAPI)
TARGET_LINK_LIBRARIES(gridGenerator $PSAPI)

或者您可以手动将其添加到链接器标志中 - 您已将其添加到示例中的编译器标志中。

【讨论】:

感谢您的分析,现在我收到此错误:为不是由该项目构建的目标“gridSolver”指定链接库。 那么您提供的示例显然是错误的,或者您将其粘贴到了错误的位置,因为您的示例显然有一个gridSolver 目标。如果您在add_executable 之前添加了target_link_libraries,请阅读cmake 文档。 你说得对,我把它放在 add_executable 部分之前

以上是关于C++ 怎么实现获取当前PC 硬盘 内存的大小以及已使用大小,加上CPU使用率的主要内容,如果未能解决你的问题,请参考以下文章

显示当前主机系统信息

ubuntu下怎么查看文件大小

服务器硬盘内存怎么看

C# 获取本机CPU序列号,MAC地址,硬盘ID,本机IP地址,计算机名,物理内存,PC类型

怎么解决pc电脑无法读取苹果电脑的硬盘

linux jvm内存大小怎么查看