Как использовать GetProcessMemoryInfo в C ++? - PullRequest
12 голосов
/ 27 декабря 2011

Я пытаюсь использовать функцию GetProcessMemoryInfo из 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 ]

21 голосов
/ 27 декабря 2011

Проблема

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 ));
4 голосов
/ 27 декабря 2011

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

3 голосов
/ 31 августа 2015

На MSDN:

BOOL WINAPI GetProcessMemoryInfo ( In HANDLE Process, Out PPROCESS_MEMORY_COUNTERS ppsmemCounters, В DWORD cb );

Пример:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...