Узнать загрузку CPU. Как?

Тема в разделе "WASM.WIN32", создана пользователем Stub, 11 ноя 2004.

  1. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    Пытаюсь программно узнать загрузку процессора. Нашел сурс один, но что-то не то у меня получается. Plz, знающие люди, помогите...

    Код CPU_use.bat


    Код (Text):
    1. ;@echo off
    2. ;goto make
    3.  
    4. .686p
    5. .MMX
    6. .XMM
    7. .model flat, stdcall
    8. option casemap:none
    9.  
    10. include \masm32\include\windows.inc
    11. include \masm32\include\kernel32.inc
    12. include \masm32\include\user32.inc
    13.  
    14. includelib \masm32\lib\kernel32.lib
    15. includelib \masm32\lib\user32.lib
    16.  
    17. STATUS_SUCCESS equ 0
    18. SystemProcessorTimes equ 8
    19.  
    20. SYSTEM_PROCESSOR_TIMES STRUCT
    21. IdleTime QWORD ?
    22. KernelTime QWORD ?
    23. UserTime QWORD ?
    24. DpcTime QWORD ?
    25. InterruptTime QWORD ?
    26. InterruptCount QWORD ?
    27. SYSTEM_PROCESSOR_TIMES ENDS
    28.  
    29. .data
    30. NtDll db "NTDLL.DLL",0
    31. ZQSI db "ZwQuerySystemInformation",0
    32. CPU db "загрузка CPU: %u",0
    33.  
    34.  
    35. .data?
    36. ZwQuerySystemInformation dd ?
    37. Temp dd ?
    38. tcphand dd ?
    39. tcpmem dd ?
    40.  
    41. processors SYSTEM_PROCESSOR_TIMES MAXIMUM_PROCESSORS dup(<>)
    42. Buffer db 512 dup(?)
    43.  
    44. .code
    45. start:
    46. invoke GetModuleHandleA,ADDR NtDll
    47. invoke GetProcAddress,eax,ADDR ZQSI
    48. mov ZwQuerySystemInformation, eax
    49.  
    50. push offset Temp
    51. push offset MAXIMUM_PROCESSORS*sizeof SYSTEM_PROCESSOR_TIMES
    52. push offset processors
    53. push SystemProcessorTimes
    54. call ZwQuerySystemInformation
    55.  
    56. invoke wsprintf,addr Buffer,addr CPU, DWORD PTR processors[0*sizeof SYSTEM_PROCESSOR_TIMES].InterruptCount
    57. invoke MessageBox,0,addr Buffer,0,0
    58.  
    59. invoke ExitProcess, NULL
    60. end start
    61.  
    62. :make
    63.  
    64. set proj=CPU_use
    65.  
    66. echo Building CPU_use.exe:
    67. echo --------------------
    68.  
    69. if exist %proj%.exe del %proj%.exe
    70. if exist %proj%.obj del %proj%.obj
    71. c:\masm32\BIN\ml /nologo /c /coff /Cp %proj%.bat
    72. c:\masm32\BIN\link /NOLOGO /SUBSYSTEM:WINDOWS /MERGE:.rdata=.text /IGNORE:4078 %proj%.obj
    73. if exist %proj%.obj del %proj%.obj
    74.  
    75. echo.
    76. pause
     
  2. dmit10

    dmit10 New Member

    Публикаций:
    0
    Регистрация:
    25 окт 2004
    Сообщения:
    37
    Адрес:
    Russia
    У меня есть пример на Дельфи. Разбираться нет времени. Делай с ним, что хочешь.

    [​IMG] 154812139__adCpuUsage.pas
     
  3. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
  4. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Four-F, засада :dntknw: твой код работает только под отладчиком. Без него просто вылитает, как-будто ничего не запускали. Такая проблема не только у меня... Может есть какие-то мысли ?
     
  5. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Мыслей нет. Может выравнивание. Там у меня при обломах никаких мессаг не выводится. Добавь пару MessageBox'ов, может и узнаешь в чем дело. Я пущал под w2k. Работало хоть под отладчиком, хоть без.
     
  6. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Во, нашел Ж;)
    Код (Text):
    1.  
    2. ZwQuerySystemInformation(
    3.     IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
    4.     IN OUT PVOID SystemInformation,
    5.     IN ULONG SystemInformationLength,
    6.     OUT PULONG ReturnLength
    7.     );
    8.  


    Four-F, у тебя не инициализируется переменная "cb" (SystemInformationLength), у меня (w2k) она равна 30h поэтому возвращает код STATUS_INFO_LENGTH_MISMATCH. После переделки все работает...
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
  8. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Всё Ок !!!
     
  9. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    2 Four-F, dmit10,SteelRat: Ok, 10x за участие.

    2 dmit10: В твоем примере (на сколько я разобрался), процент загрузки процессора берется из реестра.



    Вопрос: а через апишки вообще реально получить интересующую меня инфу?
     
  10. SteelRat

    SteelRat New Member

    Публикаций:
    0
    Регистрация:
    26 авг 2004
    Сообщения:
    409
    Так, быстро не нашел... Посмотри SystemProcessorStatistics (судя по названию) на сайте http://ntprog.by.ru/_def.htm может, что и нароешь :)
     
  11. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    Stub



    не наю, код как код. Токма, чего ты от него хочешь - то ??? Если уж быть серьёзному вопросу, ищи инфу по MSR, однако, сам понимаешь, что это величина переменная от проца к процу, но, вернее тебе ничто не скажет, ни одна прога, кроме самого проца.
     
  12. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    Stub

    Бейте WMI по роже, может он чево и знает !!!!!!???
     
  13. BLOWFISH

    BLOWFISH New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2004
    Сообщения:
    13
    может поможет:
     
  14. BLOWFISH

    BLOWFISH New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2004
    Сообщения:
    13
  15. Stub

    Stub New Member

    Публикаций:
    0
    Регистрация:
    11 май 2004
    Сообщения:
    311
    Адрес:
    Siberia
    10x всем... бум разбираться.