Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CPU Usage для многоядерных процесоров 
:(
    Опции темы
DJVasek
Дата 11.12.2011, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 27.10.2008

Репутация: нет
Всего: нет



Доброе время суток. Как определить загрузку каждого ядра в процессоре? Операционная система windows 7. Процессор i5, число потов (Hyper-threading) = 4. Можно просто пример. А то найти никак не могу.

Спасибо.
PM MAIL   Вверх
GremlinProg
Дата 12.12.2011, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



https://www.google.com/search?q=win32_perff...ocessor+example
см. параметр PercentProcessorTime, это оно и есть


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
DJVasek
Дата 12.12.2011, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 27.10.2008

Репутация: нет
Всего: нет



Спасибо. Нашел пример.
Вот только у меня отображается 5 ядер вместо 4. Наверно 5ое - это общее использование.

Код


#define _WIN32_DCOM 
#include <iostream> 
using namespace std; 
#include <comdef.h> 
#include <Wbemidl.h> 

# pragma comment(lib, "wbemuuid.lib") 

int doit() 
{ 
    HRESULT hres; 

    // Step 1: -------------------------------------------------- 
    // Initialize COM. ------------------------------------------ 

    hres =  CoInitializeEx(0, COINIT_MULTITHREADED); 
    if (FAILED(hres)) 
    { 
        cout << "Failed to initialize COM library. Error code = 0x" 
            << hex << hres << endl; 
        return 1;                  // Program has failed. 
    } 

    // Step 2: -------------------------------------------------- 
    // Set general COM security levels -------------------------- 
    // Note: If you are using Windows 2000, you need to specify - 
    // the default authentication credentials for a user by using 
    // a SOLE_AUTHENTICATION_LIST structure in the pAuthList ---- 
    // parameter of CoInitializeSecurity ------------------------ 

    hres =  CoInitializeSecurity( 
        NULL, 
        -1,                          // COM authentication 
        NULL,                        // Authentication services 
        NULL,                        // Reserved 
        RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication 
        RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation   
        NULL,                        // Authentication info 
        EOAC_NONE,                   // Additional capabilities 
        NULL                         // Reserved 
        ); 


    if (FAILED(hres)) 
    { 
        cout << "Failed to initialize security. Error code = 0x" 
            << hex << hres << endl; 
        CoUninitialize(); 
        return 1;                    // Program has failed. 
    } 

    // Step 3: --------------------------------------------------- 
    // Obtain the initial locator to WMI ------------------------- 

    IWbemLocator *pLoc = NULL; 

    hres = CoCreateInstance( 
        CLSID_WbemLocator,             
        0, 
        CLSCTX_INPROC_SERVER, 
        IID_IWbemLocator, (LPVOID *) &pLoc); 

    if (FAILED(hres)) 
    { 
        cout << "Failed to create IWbemLocator object." 
            << " Err code = 0x" 
            << hex << hres << endl; 
        CoUninitialize(); 
        return 1;                 // Program has failed. 
    } 

    // Step 4: ----------------------------------------------------- 
    // Connect to WMI through the IWbemLocator::ConnectServer method 

    IWbemServices *pSvc = NULL; 

    // Connect to the root\cimv2 namespace with 
    // the current user and obtain pointer pSvc 
    // to make IWbemServices calls. 
    hres = pLoc->ConnectServer( 
        _bstr_t(L"ROOT\\CIMV2"), // Object path of WMI namespace 
        NULL,                    // User name. NULL = current user 
        NULL,                    // User password. NULL = current 
        0,                       // Locale. NULL indicates current 
        NULL,                    // Security flags. 
        0,                       // Authority (e.g. Kerberos) 
        0,                       // Context object 
        &pSvc                    // pointer to IWbemServices proxy 
        ); 

    if (FAILED(hres)) 
    { 
        cout << "Could not connect. Error code = 0x" 
            << hex << hres << endl; 
        pLoc->Release();     
        CoUninitialize(); 
        return 1;                // Program has failed. 
    } 

    cout << "Connected to ROOT\\CIMV2 WMI namespace" << endl; 


    // Step 5: -------------------------------------------------- 
    // Set security levels on the proxy ------------------------- 

    hres = CoSetProxyBlanket( 
        pSvc,                        // Indicates the proxy to set 
        RPC_C_AUTHN_WINNT,           // RPC_C_AUTHN_xxx 
        RPC_C_AUTHZ_NONE,            // RPC_C_AUTHZ_xxx 
        NULL,                        // Server principal name 
        RPC_C_AUTHN_LEVEL_CALL,      // RPC_C_AUTHN_LEVEL_xxx 
        RPC_C_IMP_LEVEL_IMPERSONATE, // RPC_C_IMP_LEVEL_xxx 
        NULL,                        // client identity 
        EOAC_NONE                    // proxy capabilities 
        ); 

    if (FAILED(hres)) 
    { 
        cout << "Could not set proxy blanket. Error code = 0x" 
            << hex << hres << endl; 
        pSvc->Release(); 
        pLoc->Release();     
        CoUninitialize(); 
        return 1;               // Program has failed. 
    } 

    // Step 6: -------------------------------------------------- 
    // Use the IWbemServices pointer to make requests of WMI ---- 

    // For example, get the name of the operating system 
    IEnumWbemClassObject* pEnumerator = NULL; 
    IWbemClassObject *pclsObj; 
    int i; 
    while(1) 
    { 
        i=1; 
        hres = pSvc->ExecQuery( 
            bstr_t("WQL"), 
            bstr_t("SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor"), 

            WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY, 
            NULL, 
            &pEnumerator); 

        if (FAILED(hres)) 
        { 
            cout << "Query for operating system name failed." 
                << " Error code = 0x" 
                << hex << hres << endl; 
            pSvc->Release(); 
            pLoc->Release(); 
            CoUninitialize(); 
            return 1;               // Program has failed. 
        } 

        // Step 7: ------------------------------------------------- 
        // Get the data from the query in step 6 ------------------- 


        ULONG uReturn = 0; 

        while (pEnumerator) 
        { 
            HRESULT hr = pEnumerator->Next(WBEM_INFINITE, 1, 
                &pclsObj, &uReturn); 

            if(0 == uReturn) 
            { 
                break; 
            } 

            VARIANT vtProp; 

            // Get the value of the Name property 
            //hr = pclsObj->Get(L"Name", 0, &vtProp, 0, 0); 
            hr = pclsObj->Get(L"PercentProcessorTime", 0, &vtProp, 0, 0); 
            wcout << " CPU Usage of CPU " << i << " : " << vtProp.bstrVal << endl; 
            VariantClear(&vtProp); 
            if (i%5==0)
                cout<<endl;

            //IMPORTANT!! 
            pclsObj->Release(); 

            i++; 
        } 

    }

    // Cleanup 
    // ======== 

    pSvc->Release(); 
    pLoc->Release(); 
    pEnumerator->Release(); 
    pclsObj->Release(); 
    CoUninitialize(); 

    return 0;   // Program successfully completed. 
} 

int main(int argc, char **argv) 
{ 
    doit(); 

    Sleep(10000); 
}


Это сообщение отредактировал(а) DJVasek - 12.12.2011, 10:47
PM MAIL   Вверх
GremlinProg
Дата 12.12.2011, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(DJVasek @  12.12.2011,  12:41 Найти цитируемый пост)
Вот только у меня отображается 5 ядер вместо 4. Наверно 5ое - это общее использование.

да, так и есть
об этом говорит его имя: _Total

остальные именуются номерами (с нуля)


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.