Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Замер рівні використання процесора

РефератДопомога в написанніДізнатися вартістьмоєї роботи

К моєму власному подиву результат перекладу З зрозумілою людською VB відмінно заробив! По-сему, якщо Вашої програмі треба знати завантаженість проца, чи коли зацікавитеся доступом до реєстру з WinApi32, то Можете ознайомитися з простеньким прикладом. Зрозуміло у його варіанті потрібно було б вставити перевірку типу Windows (наприклад через GetWindowsVersion), згортання в SysTray тощо., але… Читати ще >

Замер рівні використання процесора (реферат, курсова, диплом, контрольна)

Замер рівні використання процесора

Недавно у статті, присвяченого недокументированным можливостям 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.

Некоторые константи з АПІ 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.

пока вкотре не нажмём на кнопочку

Показати весь текст
Заповнити форму поточною роботою