Как использовать GetProcessMemoryInfo в C++?
Я пытаюсь использовать функцию GetProcessMemoryInfo
of psapi.h
внутри приложения C++ в 32-разрядной версии Windows 7.
я следовал какому-то учебнику, и я сделал что-то вроде:
PPROCESS_MEMORY_COUNTERS pMemCountr;
pMemCountr = new PROCESS_MEMORY_COUNTERS();
bool result = GetProcessMemoryInfo(GetCurrentProcess(),
pMemCountr,
sizeof(PPROCESS_MEMORY_COUNTERS));
проблема в том, что я всегда получаю "false" от выполнения GetProcessMemoryInfo()
метод. Что я здесь делаю не так?
3 ответов
проблема
sizeof(PPROCESS_MEMORY_COUNTERS)
дает размер PPROCESS_MEMORY_COUNTERS
что это PROCESS_MEMORY_COUNTERS*
введите указатель (Примечание double P
в самом начале).
что вы хотите
sizeof(PROCESS_MEMORY_COUNTERS)
Также вам будет намного лучше без new
здесь:
PROCESS_MEMORY_COUNTERS memCounter;
BOOL result = GetProcessMemoryInfo(GetCurrentProcess(),
&memCounter,
sizeof( memCounter ));
на MSDN:
БООЛ по WinAPI GetProcessMemoryInfo( на процесс ручки, из PPROCESS_MEMORY_COUNTERS ppsmemCounters, на параметр DWORD КБ );
пример:
HANDLE hProcess;
PROCESS_MEMORY_COUNTERS pmc;
printf( "\nProcess ID: %u\n", processID );
// Print information about the memory usage of the process.
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID );
if (NULL == hProcess)
return;
if (GetProcessMemoryInfo( ( hProcess, &pmc, sizeof(pmc)))
{
printf( "\tWorkingSetSize: 0x%08X - %u\n", pmc.WorkingSetSize,
pmc.WorkingSetSize / 1024);
printf( "\tQuotaPeakPagedPoolUsage: 0x%08X - %u\n",
pmc.QuotaPeakPagedPoolUsage , pmc.QuotaPeakPagedPoolUsage / 1024);
printf( "\tQuotaPagedPoolUsage: 0x%08X - %u\n", pmc.QuotaPagedPoolUsage,
pmc.QuotaPagedPoolUsage / 1024);
printf( "\tQuotaPeakNonPagedPoolUsage: 0x%08X - %u\n",
pmc.QuotaPeakNonPagedPoolUsage,pmc.QuotaPeakNonPagedPoolUsage / 1024 );
printf( "\tQuotaNonPagedPoolUsage:0x%08X-%u\n",pmc.QuotaNonPagedPoolUsage , pmc.QuotaNonPagedPoolUsage / 1024);
printf( "\tPagefileUsage: 0x%08X - %u\n", pmc.PagefileUsage, pmc.PagefileUsage/1024 );
printf( "\tPeakPagefileUsage: 0x%08X - %u\n", pmc.PeakPagefileUsage, pmc.PeakPagefileUsage/1024 );
printf( "\tcb: 0x%08X - %u\n", pmc.cb , pmc.cb / 1024);
}
CloseHandle(hProcess);
или вы можете посмотреть полный код здесь