|
|
| Посл.отвђт | Сообщен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 |
|
|
Дата: Ноя 13, 2004 12:09:41 10x всем... бум разбираться. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.090 |