【发布时间】:2015-12-18 08:02:08
【问题描述】:
我正在使用GetProcessMemoryInfo 函数通过其 PID 确定进程内存使用情况。
使用常规 PROCESS_MEMORY_COUNTERS 一切正常,但我需要 PrivateUsage 成员,该成员仅存在于扩展结构 PROCESS_MEMORY_COUNTERS_EX 中。
有几个文档促使我将扩展类型强制转换为基本类型,否则我的示例将无法编译。
我仍然能够从基本成员那里获得价值,例如 PeakWorkingSetSize,但 PrivateUsage 始终为 0。 我什至尝试重新定义 PSAPI_VERSION - 仍然没有。程序无法使用 PSAPI_VERSION
这是我的例子。
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <psapi.h>
void _tmain (int argc, TCHAR *argv[])
{
// use first argument as PID
DWORD processID = strtol(argv[1],0, 0);
HANDLE hProcess = OpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | SYNCHRONIZE,
FALSE,
processID);
PROCESS_MEMORY_COUNTERS_EX pmc;
ZeroMemory(&pmc, sizeof(PROCESS_MEMORY_COUNTERS_EX));
// wait until process is dead
WaitForSingleObject( hProcess , INFINITE );
GetProcessMemoryInfo( hProcess, (PROCESS_MEMORY_COUNTERS*)&pmc, sizeof(pmc) );
fprintf(stdout, " PeakWorkingSetSize : %d\n", pmc.PeakWorkingSetSize);
fprintf(stdout, " PrivateUsage : %d\n", pmc.PrivateUsage);
CloseHandle(hProcess);
}
我执行notepad.exe,然后我把它的PID放到上面的程序中,毕竟我关闭记事本并寻找结果但PrivateUsage为零=(:
C:\utils>simple.exe 45656
PeakWorkingSetSize : 6377472
PrivateUsage : 0
C:\utils>
有什么建议为什么会发生?
C:\utils>cl --version
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.61030 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
在 WIN7x64 上运行。
【问题讨论】:
-
嘿@zamuka 你有什么解决办法吗?
-
不。我放弃了,进入了 JavaScript 领域 =(
-
听到这个消息很难过。将扩展类型转换为基本类型对我有用。