ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

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

     

    Інформатика, програмування

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

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

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status