Бесплатные Рефераты >>> Информатика, Программирование  



 

 

Замер степени использования процессора

 

Замер степени использования процессора

Недавно в статье, посвящённой недокументированным возможностям Windows, я обнаружил интересный способ измерения степени использования процессора. Дело в том, что в Windows 9x существуют счётчики Performance Counters, которые можно включить из реестра, и в реестр же они будут посылать результаты замеров. Например загруженности процессора. Есть они и в NT, но доступ к ним сложнее.

К моему собственному удивлению результат перевода С на человеческий VB отлично заработал! По-сему, если Вашей программе нужно знать загруженность проца, или если Вы заинтересуетесь доступом в реестр из WinApi32, то Вы можете познакомиться с простеньким примером. Разумеется в полном варианте нужно было бы вставить проверку типа Windows (например через GetWindowsVersion), сворачивание в SysTray и т.п., но в "укороченном" виде Вам будет проще приспособить данную фичу Windows к своим потребностям.

Итак. Если у Вас не NT. Расположите на форме кнопочку. Назовём её cmdStart. Как водится, в раздел General Declarations вставляем:

Открыть нужный ключ:

Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" ( _

ByVal hkey As Long, _

ByVal pSubKey As String, _

ByVal ulOptions As Long, _

ByVal samDesired As Long, _

phkResult As Long) As Long

hkey, lpSubKey - пути к ключу,

ulOptions - зарезервировано: должно быть ноль,

samDesired - тип доступа: комбинация предопределённых констант,

phkResult - переменная, получающая хэндл нужного ключа. Не забудьте потом закрыть.

Получить тип и значение параметра из ранее открытого ключа:

Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _

ByVal hkey As Long, _

ByVal lpValueName As String, _

ByVal lpReserved As Long, _

lpType As Long, _

lpData As Any, _

lpcbData As Long) As Long

hkey - хэндл открытого ранее ключа,

lpValueName - имя параметра, который нужно прочитать,

lpReserved - зарезервировано: должно быть ноль,

lpType - переменная, в которую будет возвращаться тип параметра

можно передать ноль, если тип не требуется (нам, кстати, передаст 3 - REG_BINARY),

lpData - то, что нас интересует,

lpcbData - переменная, которая содержит длину буфера под lpData,

после выполнения будет содержать кол-во в действительности переданных байт

у нас - длина слова: 4. Если переменную заменить просто на 4 - тоже работает

Закрытие ранее открытого ключа:

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hkey As Long) As Long

Некоторые константы из API Viewer:

Private Const HKEY_DYN_DATA = &H80000006

Private Const STANDARD_RIGHTS_ALL = &H1F0000

Private Const READ_CONTROL = &H20000

Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)

Private Const KEY_QUERY_VALUE = &H1

Private Const KEY_SET_VALUE = &H2

Private Const KEY_CREATE_SUB_KEY = &H4

Private Const KEY_ENUMERATE_SUB_KEYS = &H8

Private Const KEY_NOTIFY = &H10

Private Const KEY_CREATE_LINK = &H20

Private Const SYNCHRONIZE = &H100000

Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL OR _

KEY_QUERY_VALUE OR KEY_SET_VALUE OR _

KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or _

KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))

Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or _

KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or _

KEY_NOTIFY) And (Not SYNCHRONIZE))

Для служебных нужд:

Самый ресурсощедящий способ выждать паузу (в миллисекундах):

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Всегда пригодится:

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _

ByVal hWndInsertAfter As Long, _

ByVal x As Long, _

ByVal y As Long, _

ByVal cx As Long, _

ByVal cy As Long, _

ByVal WFlags As Long) As Long

А это наше:

Dim hkey As Long

Dim dwCPUUsage As Long

Dim lpcbData As Longпо-моему действительно лучше выкинуть,

подставив в нужных местах 4. Ау, теоретики!

Dim bStart As Boolean

Private Sub Form_Load()

SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3

видим всегда

End Sub

Private Sub cmdStart_Click()

bStart = Not bStart

bStart - это Вкл-Выкл. См. далее

If bStart Then

если - True - начинаем

cmdStart.Caption = "&Stop"

меняем название кнопочки

Включаем счётчик, считывая значение соответствующего ключа:

If RegOpenKeyEx(HKEY_DYN_DATA, "PerfStatsStartStat", 0, KEY_ALL_ACCESS, _

hkey) <> 0 Then Exit Sub

lpcbData = 4

RegQueryValueEx hkey, "KERNELCPUUsage", 0, 0, dwCPUUsage, lpcbData

RegCloseKey hkey

закрыть ключ

Считываем значение прямо из реестра:

If RegOpenKeyEx(HKEY_DYN_DATA, "PerfStatsStatData", 0, KEY_READ, _

hkey) <> 0 Then Exit Sub

Do While bStart

пока ещё раз не нажмём на кнопочку     <

RegQueryValueEx hkey, "KERNELCPUUsage", 0, 0, dwCPUUsage, lpcbData

Sleep 500

интервал опроса - полсекунды

Caption = Str$(dwCPUUsage) & "%"

Любуемся!!!

DoEvents

даём жить

Loop

RegCloseKey hkey

закрыть ключ

останавливаем счётчик. Если Вы прервали выполнение программы

до этого момента, остановить счётчик можно только перезагрузившись!!!

Проверено:((

If RegOpenKeyEx(HKEY_DYN_DATA, "PerfStatsStopStat", 0, KEY_ALL_ACCESS, _

hkey) <> 0 Then Exit Sub

lpcbData = 4

RegQueryValueEx hkey, "KERNELCPUUsage", 0, 0, dwCPUUsage, lpcbData

RegCloseKey hkey

помним всегда!

Else

cmdStart.Caption = "&Start"

меняем название кнопочки и...

Caption = "Stoped..."

не даем себе впасть в уныние глядя на зависшие 100%

End If

End Sub

Private Sub Form_Unload(Cancel As Integer)

If bStart Then

cmdStart_Click

End If

ленивые меня поймут;-)

End Sub

Список литературы

Для подготовки данной работы были использованы материалы с сайта http://visualprogs.narod.ru/


 


 

Internet
Сетевые технологии и Internet Современные сетевые технологии способствовали новой технической революции. В США созданию единой сети компьютеров придают такое же значение, что и строительству скоростных автомагистралей в шестидесятые...

Кому нужна Vista?
Кому нужна Vista? Хватит ли мощности вашего компьютера для перехода на Vista? Все ли ваши программы будут поддерживаться новой ОС? Как безопасно перенести данные? В этой статье вы найдете ответы на важные вопросы, связанные с...

Вычисление определённых интегралов
Министерство Образования Российской Федерации Рязанская государственная радиотехническая академия Кафедра вычислительной и прикладной математики. ВЫЧИСЛЕНИЕ ОПРЕДЕЛЕННЫХ ИНТЕГРАЛОВ. Пояснительная записка к курсовой...

Взаимодействие компьютера и человека как социальное явление
Взаимодействие компьютера и человека как социальное явление О.Г.Левина Двадцатый век обнаружил симптомы новой цивилизации. Человек породил сверхсложные машины, вышел в космическое пространство, покорил термоядерную...

Графическая нотация для документирования информационной архитектуры и взаимодействий пользователя с веб-сайтом
Графическая нотация для документирования информационной архитектуры и взаимодействий пользователя с веб-сайтом Джесс Джеймс Гарретт Одним из способов представления информационной архитектуры и взаимодействий ...

Принципиальные отличия WIN95 от предыдущих версий. Достоинства и недостатки WIN95
WINDOWS 95 - дорога в Чикаго. На протяжении всего периода разработки и создания система Windows 95 была известна под кодовым названием Чикаго, и внушительный слайд на самых первых её презентациях изображал карту США, озаглавленную:...

База данных Бюро знакомств
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ КОРАБЛЕБУДУВАННЯ ім. адм. Макарова Херсонський філіал Кафедра інформаційних технологій Курсова робота З ДИСЦИПЛІНИ “Об’єктно – орієнтоване...

Линейное программирование: решение задач графическим способом
Министерство Образования Российской Федерации Тюменский Государственный Нефтегазовый Университет филиал в городе Ишиме Курсовая работа по программированию на тему: Линейное программирование: решение задач графическим...

Вычислительные системы, сети и телекоммуникации
1. Основные тенденции развития ЭВМ (состав и соотношение технических и программных средств, быстродействие, память, интеллектуальность). 2. Классификация средств ЭВТ (понятие машинного парка, соотношение типов ЭВМ). 3....

К вопросу определения понятия сетевых СМИ
К вопросу определения понятия сетевых СМИ Светлана Батманова Эволюция коммуникационных каналов последних десятилетий и появление новой, сетевой коммуникации существенно повлияли на систему средств массовой информации....

Стабильная система
Стабильная система Говорят, что Windows - очень глючная система. Глючная и не стабильная. Но на самом деле, если у человека что-то не работает на компьютере, как правило, причина кроется в двух файлах: "руки.sys" и "голова.dll"....