Как использовать 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 ));

изменить sizeof(PPROCESS_MEMORY_COUNTERS) на sizeof (PROCESS_MEMORY_COUNTERS)


на 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);

или вы можете посмотреть полный код здесь