Контролировать загрузку процессора на XP программно - PullRequest
1 голос
/ 02 октября 2009

Есть ли способ получить нагрузку на системный процессор в Windows XP через вызов DLL или другим способом. Я хотел бы встроить вызов в мою программу, и когда загрузка процессора достигает 100%, я бы хотел зафиксировать время. Моя программа максимально загружает процессор каждые пару дней, и я хотел бы точно определить, когда я смогу сделать дамп данных и проанализировать данные.

Спасибо!

Ответы [ 3 ]

1 голос
/ 02 октября 2009

Вы можете использовать счетчики производительности.

См. «Использование функций PDH для потребления данных счетчика»

Конкретный счетчик, который вы должны использовать, - время процессора:

Время процессора - это процент времени, в течение которого процессор выполняет неиспользуемый поток. Этот счетчик был задуман как основной индикатор активности процессора. Он рассчитывается путем измерения времени, которое процессор тратит на выполнение потока процесса ожидания. в каждом интервале выборки и вычитая это значение из 100%. (Каждый процессор имеет свободный поток, который потребляет циклы, когда другие потоки не готовы к работе). Его можно рассматривать как процент от интервала выборки, потраченного на выполнение полезной работы. Этот счетчик отображает средний процент времени занятости, наблюдаемого в течение интервала выборки. Он рассчитывается путем мониторинга времени, когда служба была неактивна, а затем вычитает это значение из 100%.

#define _PROCESSOR_COUNTER _T("\\Processor(0)\\% Processor Time")
0 голосов
/ 02 октября 2009

Очевидно, вы заботитесь только о том, когда / если ваша программа использует 100% ЦП. Чтобы сделать это частью одного и того же процесса, вам нужно запустить код moinitoring в отдельном потоке с повышенным приоритетом (поэтому он будет работать, даже если остальная часть программы потребляет 100% ЦП). Он будет проводить большую часть своего времени в спящем режиме, но периодически вызывает GetProcessTimes (), чтобы узнать, сколько процессорного времени занимает его процесс.

0 голосов
/ 02 октября 2009

<a href="http://msdn.microsoft.com/en-us/library/ms724509%28VS.85%29.aspx" rel="nofollow noreferrer">NtQuerySystemInformation()</a> выглядит актуально, но кажется (полу) устаревшим / внутренним и не рекомендуется для использования. Это список предложений других функций для использования. Из них, кажется, <a href="http://msdn.microsoft.com/en-us/library/ms724400%28VS.85%29.aspx" rel="nofollow noreferrer">GetSystemTimes()</a> должно быть полезно, если вы запускаете его дважды с известной задержкой между.

...