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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить общую загрузку CPU, без pdh.h и без использования реестра 
V
    Опции темы
Alca
Дата 27.2.2012, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Как получить общую загрузку CPU без pdh.h и без использования реестра?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Dem_max
Дата 27.2.2012, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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





--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Alca
Дата 28.2.2012, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Это ты про GetSystemTimes?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 28.2.2012, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Рабочий пример на Windows 7 SP1 x64, VC++ 2010 SP1:

Код

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <assert.h>

#define xSAFE_DIV(x, y)         (0 == (y)) ? (0) : ((x) / (y))
//----------------------------------------------------------------------------------------------------
int 
iGetCpuUsage() {
    ULONGLONG             ullRes         = 0UL;

    FILETIME              ftSysIdle      = {0};
    FILETIME              ftSysKernel    = {0};
    FILETIME              ftSysUser      = {0};

    ULARGE_INTEGER        ulSysIdle      = {0};
    ULARGE_INTEGER        ulSysKernel    = {0};
    ULARGE_INTEGER        ulSysUser      = {0};

    static ULARGE_INTEGER ulSysIdleOld   = {0};
    static ULARGE_INTEGER ulSysKernelOld = {0};
    static ULARGE_INTEGER ulSysUserOld   = {0};
    

    BOOL blRes = ::GetSystemTimes(&ftSysIdle, &ftSysKernel, &ftSysUser);
    /*DEBUG*/assert(FALSE != blRes);

    (void)CopyMemory(&ulSysIdle,   &ftSysIdle,   sizeof(ftSysIdle));
    (void)CopyMemory(&ulSysKernel, &ftSysKernel, sizeof(ftSysKernel));
    (void)CopyMemory(&ulSysUser,   &ftSysUser,   sizeof(ftSysUser));

    ullRes = xSAFE_DIV(
                (
                    (ulSysKernel.QuadPart - ulSysKernelOld.QuadPart) + 
                    (ulSysUser.QuadPart   - ulSysUserOld.QuadPart)   - 
                    (ulSysIdle.QuadPart   - ulSysIdleOld.QuadPart)
                ) * 100ULL
                ,
                (ulSysKernel.QuadPart - ulSysKernelOld.QuadPart) + (ulSysUser.QuadPart - ulSysUserOld.QuadPart) 
        );

    ulSysIdleOld.QuadPart   = ulSysIdle.QuadPart;
    ulSysUserOld.QuadPart   = ulSysUser.QuadPart;
    ulSysKernelOld.QuadPart = ulSysKernel.QuadPart;

    return static_cast<int>( ullRes ); 
}
//----------------------------------------------------------------------------------------------------
int main() {
    for ( ; ; )    {
        int iRes = iGetCpuUsage();

        printf("CPU usage: %3d%%\r", iRes);

        ::Sleep(1000UL);
    }

    return 0;
}
//----------------------------------------------------------------------------------------------------



Это сообщение отредактировал(а) Alca - 28.2.2012, 19:24


--------------------
PM WWW ICQ Skype Jabber   Вверх
Dem_max
Дата 1.3.2012, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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





--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Alca
Дата 1.3.2012, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Видел, спасибо


--------------------
PM WWW ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0478 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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