Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325

Требуется получить значение общей нагрузки на процессор

18.07.2016, 13:38. Показов 3048. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здесь значение сильно отличается от значения, показываемого Диспетчером задач Windows.
Неверно значит что-то.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
PDH_STATUS pdhResult = 0;
    TCHAR szCounterPath[1024];
    DWORD dwPathSize = sizeof(szCounterPath) / sizeof(TCHAR);
    PDH_COUNTER_PATH_ELEMENTS pe = { 0 };
    HQUERY hQuery;
    HQUERY hCounter;
 
    // создание нового запроса 
    pdhResult = PdhOpenQuery(NULL, 0, &hQuery);
 
    // создание полного пути к счетчику и его добавление 
    pe.szMachineName = 0;
    pe.szObjectName = _T("Процессор"); // _T("Processor"); 
    pe.szInstanceName = _T("_Total");
    pe.szParentInstance = NULL;
    pe.dwInstanceIndex = 0;
    pe.szCounterName = _T("% загруженности процессора"); // _T("Processor Time"); 
    pdhResult = PdhMakeCounterPath(&pe, szCounterPath, &dwPathSize, 0);
    pdhResult = PdhAddCounter(hQuery, szCounterPath, 0, &hCounter);
 
    // сбор данных в течение 1 секунды 
    pdhResult = PdhCollectQueryData(hQuery);
    Sleep(1000);
    pdhResult = PdhCollectQueryData(hQuery);
 
    // получение форматированных данных 
    PDH_FMT_COUNTERVALUE stFormattedValue = { 0 };
    pdhResult = PdhGetFormattedCounterValue(hCounter, PDH_FMT_LONG, NULL, &stFormattedValue);
    pdhResult = PdhRemoveCounter(hCounter);
    pdhResult = PdhCloseQuery(hQuery);
    cout << stFormattedValue.longValue << endl;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.07.2016, 13:38
Ответы с готовыми решениями:

Определить сопротивление общей нагрузки и наибольшую мощность
Два источника тока с ЭДС 24 В и с внутренним сопротивлениями 2 Ом и 3 Ом соединены параллельно. При каком сопротивлении внешней нагрузки...

Уменьшение нагрузки на процессор
Написал простой keylogger для курсовой, но нагрузка на цп слишком большой(15-20%). 1)Как можно уменьшить нагрузку 2)Как можно...

Нет нагрузки на процессор
Как вы поняли из заголовка проблема с нагрузкой на проц и в диспетчере задач ее абсолютно нет на некоторых приложениях. Из-за этого не...

14
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
20.07.2016, 22:14
C++
1
2
3
4
5
6
7
8
9
10
11
pdhResult = PdhCollectQueryData(hQuery);
    while (true)
    {
        Sleep(100);
        pdhResult = PdhCollectQueryData(hQuery);
 
        // получение форматированных данных 
        PDH_FMT_COUNTERVALUE stFormattedValue = { 0 };
        pdhResult = PdhGetFormattedCounterValue(hCounter, PDH_FMT_LONG, NULL, &stFormattedValue);
        cout << stFormattedValue.longValue << endl;
    }
Если сомневаетесь.
0
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
21.07.2016, 11:16  [ТС]
Вообще чушь полная получается. Ни единого совпадения на графике с системным монитором. За каждые 100 тактов sleep показание меняется с 0 до 80 (к примеру, говоря о результатах замера).
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
21.07.2016, 11:41
Это может быть из-за того, что снимается показатель только с одного из ядер).Так же не стоит забывать, что обновление информации в диспетчере задач происходит с интервалом.
Лично у меня совпадают показатели, ну, по крайней мере очень близки с текущей загруженностью.
0
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
21.07.2016, 11:50  [ТС]
Ахах) код, что выше работает отлично. Я обнаружил неисправность в работе студии.
Опуская подробности, закомментировал весь код ConsoleApplication С++ кроме #include "stdafx.h" void main() { return; }.
Всё выводит числа в цикле..

Добавлено через 7 минут
Только как избавится от зависимости к языку ОС?
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
21.07.2016, 12:18
Зависимость решается функцией PdhLookupPerfNameByIndex.
0
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
21.07.2016, 13:31  [ТС]
C++
1
2
3
    LPWSTR Processor = NULL, ProcessorTime = NULL;
    PdhLookupPerfNameByIndex(NULL, 234, Processor, &dwPathSize);
    PdhLookupPerfNameByIndex(NULL, 200, ProcessorTime, &dwPathSize);
Даёт всегда 0 при сборе данных с счётчика.
Какие индексы нужно использовать?
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
21.07.2016, 17:46
индексы можно найти в реестре по пути HKLM\Software\Microsoft\Windows NT\CurrentVersion\Perflib\
0
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
21.07.2016, 19:17  [ТС]
Придётся всегда (программно) лезть в реестр, чтобы узнать эти индексы?
Т.е. для всех windows nt именно такие значения?

Там несколько параметров и все шестнадцатеричные. Какие именно?
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
21.07.2016, 20:26
Perflib\009(или 019) строка "Counter". Ве индексы указаны
Кликните здесь для просмотра всего текста
1
1847
2
System
4
Memory
6
% Processor Time
10
File Read Operations/sec
12
File Write Operations/sec
14
File Control Operations/sec
16
File Read Bytes/sec
18
File Write Bytes/sec
20
File Control Bytes/sec
24
Available Bytes
26
Committed Bytes
28
Page Faults/sec
30
Commit Limit
32
Write Copies/sec
34
Transition Faults/sec
36
Cache Faults/sec
38
Demand Zero Faults/sec
40
Pages/sec
42
Page Reads/sec
44
Processor Queue Length
46
Thread State
48
Pages Output/sec
50
Page Writes/sec
52
Browser
54
Announcements Server/sec
56
Pool Paged Bytes
58
Pool Nonpaged Bytes
60
Pool Paged Allocs
64
Pool Nonpaged Allocs
66
Pool Paged Resident Bytes
68
System Code Total Bytes
70
System Code Resident Bytes
72
System Driver Total Bytes
74
System Driver Resident Bytes
76
System Cache Resident Bytes
78
Announcements Domain/sec
80
Election Packets/sec
82
Mailslot Writes/sec
84
Server List Requests/sec
86
Cache
88
Data Maps/sec
90
Sync Data Maps/sec
92
Async Data Maps/sec
94
Data Map Hits %
96
Data Map Pins/sec
98
Pin Reads/sec
100
Sync Pin Reads/sec
102
Async Pin Reads/sec
104
Pin Read Hits %
106
Copy Reads/sec
108
Sync Copy Reads/sec
110
Async Copy Reads/sec
112
Copy Read Hits %
114
MDL Reads/sec
116
Sync MDL Reads/sec
118
Async MDL Reads/sec
120
MDL Read Hits %
122
Read Aheads/sec
124
Fast Reads/sec
126
Sync Fast Reads/sec
128
Async Fast Reads/sec
130
Fast Read Resource Misses/sec
132
Fast Read Not Possibles/sec
134
Lazy Write Flushes/sec
136
Lazy Write Pages/sec
138
Data Flushes/sec
140
Data Flush Pages/sec
142
% User Time
144
% Privileged Time
146
Context Switches/sec
148
Interrupts/sec
150
System Calls/sec
152
Level 1 TLB Fills/sec
154
Level 2 TLB Fills/sec
156
Enumerations Server/sec
158
Enumerations Domain/sec
160
Enumerations Other/sec
162
Missed Server Announcements
164
Missed Mailslot Datagrams
166
Missed Server List Requests
168
Server Announce Allocations Failed/sec
170
Mailslot Allocations Failed
172
Virtual Bytes Peak
174
Virtual Bytes
178
Working Set Peak
180
Working Set
182
Page File Bytes Peak
184
Page File Bytes
186
Private Bytes
188
Announcements Total/sec
190
Enumerations Total/sec
198
Current Disk Queue Length
200
% Disk Time
202
% Disk Read Time
204
% Disk Write Time
206
Avg. Disk sec/Transfer
208
Avg. Disk sec/Read
210
Avg. Disk sec/Write
212
Disk Transfers/sec
214
Disk Reads/sec
216
Disk Writes/sec
218
Disk Bytes/sec
220
Disk Read Bytes/sec
222
Disk Write Bytes/sec
224
Avg. Disk Bytes/Transfer
226
Avg. Disk Bytes/Read
228
Avg. Disk Bytes/Write
230
Process
232
Thread
234
PhysicalDisk
236
LogicalDisk
238
Processor
240
% Total Processor Time
242
% Total User Time
244
% Total Privileged Time
246
Total Interrupts/sec
248
Processes
250
Threads
252
Events
254
Semaphores
256
....................
.................
2178
CurrentResources

0
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
21.07.2016, 20:49  [ТС]
Вы не ответили((
Каждый раз придётся эти индексы читать или значения индексов для всех windows nt одинаковые?
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
21.07.2016, 21:57
Цитата Сообщение от dm stark Посмотреть сообщение
Каждый раз придётся эти индексы читать
Точно сказать не могу. Но! В Perflib есть 2 подраздела, где в одном (009) все индексы на английском, а в другом (019) на русском. Если их сравнивать, то индексы и описания совпадают.Скорей всего так есть в каждой локализации операционной системы WIndows (один раздел на интернациональном языке, другой - на региональном). От сюда можно сделать вывод, что так будет везде.
0
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
21.07.2016, 23:17  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
TCHAR szObjectName[256], szCounterName[256], szCounterPath[1024];
    DWORD dwPathSize = sizeof(szCounterPath) / sizeof(TCHAR);
    DWORD dwObjectSize = sizeof(szObjectName);
    PDH_COUNTER_PATH_ELEMENTS pdhCounterPathEls = { 0 };
 
    // Creates a new query that is used to manage the 
    // collection of CPU total load performance data.
 
    PdhOpenQuery(NULL, 0, &hQuery);
 
    // The formation of the way to the counter to d
    // etermine the total load on the processor.
 
    PdhLookupPerfNameByIndex(NULL, 238, szObjectName, &dwObjectSize);
    PdhLookupPerfNameByIndex(NULL, 6, szCounterName, &dwObjectSize);
    cout << szObjectName << "\" << szCounterName << endl;//!
Странно. Не работает... Значения из указанных вами параметров всякие перебрал) 238 - Processor, 6 - % processor time.
Выводит cout шестнадцатеричные коды, а не строки.
0
 Аватар для casper007
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
22.07.2016, 11:41
Сперва получаем имя объекта, потом его счетчик

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include<Windows.h>
#include<pdh.h>
#include <iostream>
using namespace std;
 
#pragma comment(lib, "pdh.lib")
 
 
 
void main(int argc, char *argv[])
{
   PDH_STATUS pdhResult = 0;
    TCHAR szCounterPath[1024];
    DWORD dwPathSize = sizeof(szCounterPath) / sizeof(TCHAR);
    PDH_COUNTER_PATH_ELEMENTS pe = { 0 };
    HQUERY hQuery;
    HQUERY hCounter;
    char szObjectName[256] = {0};
    char szCounterName[256] = {0};
    DWORD dwObjectSize = sizeof(szObjectName);
 
    
    // создание нового запроса 
    pdhResult = PdhOpenQuery(NULL, 0, &hQuery);
    pdhResult = PdhLookupPerfNameByIndexA(NULL, 6, szObjectName, &dwObjectSize);
    pdhResult = PdhLookupPerfNameByIndex(NULL, 238, szCounterName, &dwObjectSize);
    // создание полного пути к счетчику и его добавление 
    pe.szMachineName = 0;
    pe.szObjectName = ("Процессор"); // _T("Processor"); 
    pe.szInstanceName = ("_Total");
    pe.szParentInstance = NULL;
    pe.dwInstanceIndex = 0;
    pe.szCounterName = ("% загруженности процессора"); // _T("Processor Time"); 
    pdhResult = PdhMakeCounterPath(&pe, szCounterPath, &dwPathSize, 0);
    pdhResult = PdhAddCounter(hQuery, szCounterPath, 0, &hCounter);
 
    // сбор данных в течение 1 секунды 
    pdhResult = PdhCollectQueryData(hQuery);
    while (true)
    {
        Sleep(100);
        pdhResult = PdhCollectQueryData(hQuery);
 
        // получение форматированных данных 
        PDH_FMT_COUNTERVALUE stFormattedValue = { 0 };
        pdhResult = PdhGetFormattedCounterValue(hCounter, PDH_FMT_LONG, NULL, &stFormattedValue);
        cout << stFormattedValue.longValue << endl;
    }
 
    // получение форматированных данных 
    PDH_FMT_COUNTERVALUE stFormattedValue = { 0 };
    pdhResult = PdhGetFormattedCounterValue(hCounter, PDH_FMT_LONG, NULL, &stFormattedValue);
    pdhResult = PdhRemoveCounter(hCounter);
    pdhResult = PdhCloseQuery(hQuery);
    cout << stFormattedValue.longValue << endl;
    system("pause");
}
1
13 / 12 / 4
Регистрация: 20.05.2016
Сообщений: 325
22.07.2016, 11:47  [ТС]
Спасибо вам большое!
Не поможете с получением описания файла: Как получить свойство "описание" любого файла? ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.07.2016, 11:47
Помогаю со студенческими работами здесь

Падение нагрузки на процессор и видеокарту
Описание моего ПК: Процессор:AMD Phenom 2 x4 955 3.2 Ghz ОЗУ: 2 планки по 2 + 9ГБ с жесткого диска Материнка:ASUS...

Регулирование нагрузки на процессор в VB6
Всем привет! Подскажите, а если возможность регулировать загрузку процессора во время выполнения программы. Суть вопроса. Есть цикл,...

Программа для просмотра нагрузки на процессор
Есть ли какая-нибудь программа для просмотра нагрузки на цп процессов во время,препровождения в игре,просмотра фильма?Вообщем так,чтобы...

Процессор работает на максимальной частоте без нагрузки
Други, помогите, пожалуйста, победить болячку. Дано: ноут HP Probook 4530s, Mobile DualCore Intel Core i5-2410M, 2700 MHz (27 x 100)...

Оптимизация updateGL для снижения нагрузки на процессор
Здравствуйте! У меня снова проблема... Имеется виджет QGLWidget. В окне программы 9 экземпляров таких виджетов. Каждый из них что-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru