· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Узнать загрузку CPU. Как?

Посл.отвђт Сообщенiе


Дата: Ноя 11, 2004 11:26:57

Пытаюсь программно узнать загрузку процессора. Нашел сурс один, но что-то не то у меня получается. Plz, знающие люди, помогите...
Код CPU_use.bat
;@echo off
;goto make

.686p
.MMX
.XMM
.model flat, stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

STATUS_SUCCESS equ 0
SystemProcessorTimes equ 8

SYSTEM_PROCESSOR_TIMES STRUCT
IdleTime QWORD ?
KernelTime QWORD ?
UserTime QWORD ?
DpcTime QWORD ?
InterruptTime QWORD ?
InterruptCount QWORD ?
SYSTEM_PROCESSOR_TIMES ENDS

.data
NtDll db "NTDLL.DLL",0
ZQSI db "ZwQuerySystemInformation",0
CPU db "загрузка CPU: %u",0


.data?
ZwQuerySystemInformation dd ?
Temp dd ?
tcphand dd ?
tcpmem dd ?

processors SYSTEM_PROCESSOR_TIMES MAXIMUM_PROCESSORS dup(<>)
Buffer db 512 dup(?)

.code
start:
invoke GetModuleHandleA,ADDR NtDll
invoke GetProcAddress,eax,ADDR ZQSI
mov ZwQuerySystemInformation, eax

push offset Temp
push offset MAXIMUM_PROCESSORS*sizeof SYSTEM_PROCESSOR_TIMES
push offset processors
push SystemProcessorTimes
call ZwQuerySystemInformation

invoke wsprintf,addr Buffer,addr CPU, DWORD PTR processors[0*sizeof SYSTEM_PROCESSOR_TIMES].InterruptCount
invoke MessageBox,0,addr Buffer,0,0

invoke ExitProcess, NULL
end start

:make

set proj=CPU_use

echo Building CPU_use.exe:
echo --------------------

if exist %proj%.exe del %proj%.exe
if exist %proj%.obj del %proj%.obj
c:\masm32\BIN\ml /nologo /c /coff /Cp %proj%.bat
c:\masm32\BIN\link /NOLOGO /SUBSYSTEM:WINDOWS /MERGE:.rdata=.text /IGNORE:4078 %proj%.obj
if exist %proj%.obj del %proj%.obj

echo.
pause


Дата: Ноя 11, 2004 11:56:23

У меня есть пример на Дельфи. Разбираться нет времени. Делай с ним, что хочешь.

154812139__adCpuUsage.pas


Дата: Ноя 11, 2004 14:06:48 · Поправил: Four-F

Да, вроде, правильный код. Только он показывает кол-во прерываний.


1679463438__SystemProcessorTimes.rar


Дата: Ноя 11, 2004 15:04:07

Four-F, засада :( твой код работает только под отладчиком. Без него просто вылитает, как-будто ничего не запускали. Такая проблема не только у меня... Может есть какие-то мысли ?


Дата: Ноя 11, 2004 15:47:53

Мыслей нет. Может выравнивание. Там у меня при обломах никаких мессаг не выводится. Добавь пару MessageBox'ов, может и узнаешь в чем дело. Я пущал под w2k. Работало хоть под отладчиком, хоть без.


Дата: Ноя 11, 2004 17:08:58

Во, нашел Ж;)
ZwQuerySystemInformation(
    IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
    IN OUT PVOID SystemInformation,
    IN ULONG SystemInformationLength,
    OUT PULONG ReturnLength
    );

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


Дата: Ноя 11, 2004 17:49:22


Дата: Ноя 11, 2004 17:59:01

Всё Ок !!!


Дата: Ноя 12, 2004 04:43:57

2 Four-F, dmit10,SteelRat: Ok, 10x за участие.
2 dmit10: В твоем примере (на сколько я разобрался), процент загрузки процессора берется из реестра.

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


Дата: Ноя 12, 2004 10:14:40

Так, быстро не нашел... Посмотри SystemProcessorStatistics (судя по названию) на сайте http://ntprog.by.ru/_def.htm может, что и нароешь :)


Дата: Ноя 13, 2004 04:45:10

Stub

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


Дата: Ноя 13, 2004 04:50:03

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


Дата: Ноя 13, 2004 08:13:01 · Поправил: BLOWFISH

может поможет:


Дата: Ноя 13, 2004 08:15:42

чето не приклеелся

_1091499241__cpuusage.txt


Дата: Ноя 13, 2004 12:09:41

10x всем... бум разбираться.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.090