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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Загрузка CPU 
V
    Опции темы
Temdegon
Дата 29.4.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нужно получить загрузку ЦПУ в процентах, как в диспетчере задач. как это сделать?
Нашел пример кода:
Код

#include "stdafx.h"
# include <stdio.h>
# include <pdh.h>

double cpuLoad[10];
double avgCpuLoad = 0;
int i;

void DispTime()
{
    HQUERY hQuery;
    HCOUNTER hCounter;
    
    PDH_FMT_COUNTERVALUE FmtValue;
    
    PdhOpenQuery(NULL, 0, &hQuery);
    
    PdhAddCounter(hQuery, "\\Processor(_Total)\\% Processor Time", 0, &hCounter);
    
    printf("Starting the process...\n");
    
    PdhCollectQueryData(hQuery);
    
    
    PdhGetFormattedCounterValue(hCounter, PDH_FMT_DOUBLE, NULL, &FmtValue);
    printf("The cpu usage is : %f%%\n", FmtValue.doubleValue);
    
    
    PdhCloseQuery(hQuery);
    
}

void main()

{
    while(true){
    DispTime();
    
    Sleep(10000);
    }
    
}


Программа работает, но постоянно показывает 99.99%, что не есть правильно. 
Подскажите плиз.
PM MAIL   Вверх
Temdegon
Дата 29.4.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нашел рабочий пример. Вопрос решен
PM MAIL   Вверх
Alca
Дата 29.4.2009, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

Нашел рабочий пример. Вопрос решен

Покаж


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


Опытный
**


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

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



вот

Присоединённый файл ( Кол-во скачиваний: 73 )
Присоединённый файл  CpuUsage_src.zip 7,36 Kb
PM MAIL   Вверх
Alca
Дата 30.4.2009, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А чтоб тока для одного процесса?  smile 


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


Эксперт
****


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

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



Делаю так:
Код

        int SystemWideCpuUsage = usageA.GetCpuUsage("explorer.exe");
        printf("%19d%%\r",SystemWideCpuUsage);

Результат всегда 0%.  smile 


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


Опытный
**


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

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



попробуй без exe
Код

int SystemWideCpuUsage = usageA.GetCpuUsage("explorer");

у меня работает и корректно показывает
PM MAIL   Вверх
Alca
Дата 30.4.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Внатуре без расширения работает.

Добавлено через 7 минут и 58 секунд
Temdegon,  Спасибо за примерчик. Когда-то видел исходник с WMI.
Теперь можно так делать:
Код

while (true) {
    // isplay the system-wide cpu usage and the "radmin" cpu usage
    int SystemWideCpuUsage = usageA.GetCpuUsage("radmin");
    if (SystemWideCpuUsage > 0) {
        ::MessageBox(0, "Тебя пасет админ", "Внимание", MB_OK);
        ::Beep(100, 100);
    }

    ::Sleep(1000);
}
  smile 



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


Опытный
**


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

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



 smile  суупеер!
PM MAIL   Вверх
Ceceron
Дата 2.1.2010, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А подскажите как это теперь реализовать в Builder C++. Я написал всё как в main.cpp но при компиляции вылезает ошибка
[ILINK32 Error] Error: Unresolved external '__stdcall _com_issue_error(long)' referenced from C:\PROGRAM FILES\EMBARCADERO\RAD STUDIO\7.0\LIB\BCBATL.LIB|comutil

Это сообщение отредактировал(а) Ceceron - 2.1.2010, 19:26
PM MAIL   Вверх
bra1ny
Дата 3.1.2010, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



а чего через GetProcessTimes()  никак?)
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
GremlinProg
Дата 3.1.2010, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(bra1ny @  3.1.2010,  02:08 Найти цитируемый пост)
а чего через GetProcessTimes()  никак?)

в принципе, по таймеру, например раз в сек., если следить начиная с первых секунд работы процесса - можно и с GetProcessTimes считать,
а вот если не с начала - врят ли, там же копится все время,
в какую-то конкретную секунду - только последовательными вычетами или аналогичными хелперами, типа предложенного PDH


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


Новичок



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

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



Ну мне больше этот способ понравился. А вообще я в программировании человек новый smile 
А чем этот способ плох?
PM MAIL   Вверх
Alca
Дата 4.1.2010, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



CpuUsage for BC++2010.zip

Присоединённый файл ( Кол-во скачиваний: 25 )
Присоединённый файл  CpuUsage_for_BC__2010.zip 4,63 Kb


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


Новичок



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

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



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


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

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