текущая загрузка процессора процессами

Тема в разделе "WASM.WIN32", создана пользователем rain, 26 июн 2007.

  1. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    какими апи (если таковые вообще есть) можно получить сабж? как это делает к примеру taskmgr или procexp (если не брать в расчёт NtGetSystemInformation)?
     
  2. GMax

    GMax Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    218
    а чем NtQuerySystemInformation не нравится?

    или тебе каждого в отдельности?
     
  3. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    да
    тем что в мсдн в самом начале написано большими красными буквами :)
     
  4. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    А это решается простым алгоритмом подсчета. Никакие великие API не помогут в этом.

    Меньше верь тому, что там написано. Native API не имеет тенденции жутко меняться от релиза к релизу, и уж тем более быть абсолютно несовместимым.
     
  5. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    http://wasm.ru/forum/viewtopic.php?id=19430
     
  6. DoZENT

    DoZENT New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2007
    Сообщения:
    50
    На сях (использовал в каком-то своем проекте):

    Код (Text):
    1. HQUERY hQuery;
    2. HQUERY hCounter;
    3. PDH_STATUS  pdhStatus      = 0;
    4.  
    5. PDH_STATUS pdh_Init(HQUERY &hQuery, HCOUNTER &hCounter)
    6. // инициализируем PDH
    7. {
    8.     PDH_STATUS  pdhResult   = 0;
    9.     TCHAR       szCounterPath[1024];
    10.     DWORD       dwPathSize  = 1024;
    11.     PDH_COUNTER_PATH_ELEMENTS pe;
    12.     DWORD       dwType      = 0;
    13.  
    14.  
    15.  
    16.     pdhResult = PdhOpenQuery( NULL, 0, &hQuery ); // запрос на открытие PDH
    17.  
    18.     if ( pdhResult != ERROR_SUCCESS ) // если была ошибка, то
    19.         return pdhResult; // выходим, возвращая номер ошибки
    20.  
    21.     pe.szMachineName     = 0l;
    22.     pe.szObjectName      = L"Processor";
    23.     pe.szInstanceName    = L"_Total";
    24.     pe.szParentInstance  = NULL;
    25.     pe.dwInstanceIndex   = 0;
    26.     pe.szCounterName     = L"% Processor Time";
    27.  
    28.     // создаем путь к счетчику PDH
    29.     pdhResult = PdhMakeCounterPath(&pe, szCounterPath, &dwPathSize, 0);
    30.  
    31.     if (pdhResult != ERROR_SUCCESS) // если была ошибка, то
    32.         return pdhResult; // выходим, возвращая номер ошибки
    33.  
    34.     // открываем счетчик PDH
    35.     //wcscpy(szCounterPath, L"\\Processor(_Total)\\% Processor Time");
    36.     pdhResult = PdhAddCounter(hQuery, L"\\Процессор(0)\\% загруженности процессора", 0, &hCounter);
    37.  
    38.     if (pdhResult != ERROR_SUCCESS) // если была ошибка, то
    39.         return pdhResult; // выходим, возвращая номер ошибки
    40.  
    41.     // если дошли до этого места, то ошибки на 100% не было!
    42.     return pdhResult;
    43. }
    44.  
    45. int GetCPUUsage(HQUERY hQuery, HCOUNTER hCounter, PDH_STATUS &pdhStatus)
    46. // получаем загруженность проца
    47. {
    48.     DWORD       dwType      = 0;
    49.  
    50.     // даем запрос на сборы инфы
    51.     pdhStatus = PdhCollectQueryData(hQuery);
    52.  
    53.     if (pdhStatus != ERROR_SUCCESS) // если была ошибка, то
    54.         return PDH_ERROR; // выходим, возвращая ошибку
    55.  
    56.     _PDH_FMT_COUNTERVALUE pfci;
    57.     ZeroMemory(&pfci, sizeof(pfci)); // очищаем структуру pfci
    58.  
    59.     // Получаем инфу о загруженности проца!
    60.     pdhStatus = PdhGetFormattedCounterValue( hCounter, PDH_FMT_DOUBLE, &dwType, &pfci);
    61.  
    62.     if (pdhStatus != ERROR_SUCCESS) // если была ошибка, то
    63.         return PDH_ERROR; // выходим, возвращая ошибку
    64.  
    65.     return (int)pfci.doubleValue; // возвращаем загруженность проца!
    66. }
    67.  
    68. void pdh_Uninit(HQUERY hQuery, HCOUNTER hCounter)
    69. // анинициализация
    70. {
    71.     PdhRemoveCounter(hCounter); // удаляем счетчик
    72.     PdhCloseQuery(hQuery); // закрываем запрос
    73. }
     
  7. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533