Замер рівні використання процесора
К моєму власному подиву результат перекладу З зрозумілою людською 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.
пока вкотре не нажмём на кнопочку