Как узнать какой процесс на сколько загружает процессор? И попутный вопрос как узнать на сколько он загружает оперативную память? Конечно же программно
. Диспетчер задач не предлагать.
Загруженность процессора
Страница: 1
Сообщений 1 страница 5 из 5
Поделиться117.02.2010 17:53:50
Поделиться217.02.2010 19:32:11
Количество используемой памяти можно узнать с помощью функции GetProcessMem (библиотека PBOSL), а вот как получить загрузку процессора, незнаю.
Код:
; English forum: http://purebasic.myforums.net/viewtopic.php?t=8086&highlight=
; Было написано для версии PB 3.92
; Я только немного подправил для V4.1
; -----------------------------------------------------------------------------
; Наслаждайтесь! kvitaliy 16.01.07
#TH32CS_SNAPHEAPLIST = $1
#TH32CS_SNAPPROCESS = $2
#TH32CS_SNAPTHREAD = $4
#TH32CS_SNAPMODULE = $8
#TH32CS_SNAPALL = #TH32CS_SNAPHEAPLIST | #TH32CS_SNAPPROCESS | #TH32CS_SNAPTHREAD | #TH32CS_SNAPMODULE
#TH32CS_INHERIT = $80000000
#INVALID_HANDLE_VALUE = -1
#MAX_PATH = 260
#PROCESS32LIB = 9999
; Structure PROCESSENTRY32
; dwSize.l
; cntUsage.l
; th32ProcessID.l
; *th32DefaultHeapID.l
; th32ModuleID.l
; cntThreads.l
; th32ParentProcessID.l
; pcPriClassBase.l
; dwFlags.l
; szExeFile.b [#MAX_PATH]
; EndStructure
; -----------------------------------------------------------------------------
; GLOBAL PROCESS LIST! Used to retrieve information after getting process list...
; -----------------------------------------------------------------------------
Global NewList Proc32.PROCESSENTRY32 ()
; -----------------------------------------------------------------------------
; kernel32.dll open/close...
; -----------------------------------------------------------------------------
Procedure InitProcess32 ()
ProcedureReturn OpenLibrary (#PROCESS32LIB, "kernel32.dll")
EndProcedure
Procedure CloseProcess32 ()
ProcedureReturn CloseLibrary (#PROCESS32LIB)
EndProcedure
; -----------------------------------------------------------------------------
; Get/free snapshot of process list...
; -----------------------------------------------------------------------------
Procedure CreateProcessList ()
ClearList(Proc32 ())
ProcedureReturn CallFunction (#PROCESS32LIB, "CreateToolhelp32Snapshot", #TH32CS_SNAPPROCESS, 0)
EndProcedure
Procedure FreeProcessList (snapshot)
; Free process list (.PROCESSENTRY32 structures)...
ClearList (Proc32 ())
; Close snapshot handle...
ProcedureReturn CloseHandle_ (snapshot)
EndProcedure
; -----------------------------------------------------------------------------
; Iterate processes...
; -----------------------------------------------------------------------------
Procedure GetFirstProcess (snapshot)
; Allocate a new .PROCESSENTRY32 structure and fill in SizeOf (structure)...
AddElement (Proc32 ())
Proc32 ()\dwSize = SizeOf (PROCESSENTRY32)
; Call Process32First with snapshot handle and pointer to structure...
If CallFunction (#PROCESS32LIB, "Process32First", snapshot, @Proc32 ())
ProcedureReturn #True
Else
; Free the structure if function call failed...
DeleteElement (Proc32 ())
ProcedureReturn #False
EndIf
EndProcedure
Procedure GetNextProcess (snapshot)
; Allocate a new .PROCESSENTRY32 structure and fill in SizeOf (structure)...
AddElement (Proc32 ())
Proc32 ()\dwSize = SizeOf (PROCESSENTRY32)
; Call Process32Next with snapshot handle and pointer to structure...
If CallFunction (#PROCESS32LIB, "Process32Next", snapshot, @Proc32 ())
ProcedureReturn #True
Else
; Free the structure if function call failed...
DeleteElement (Proc32 ())
ProcedureReturn #False
EndIf
EndProcedure
; -----------------------------------------------------------------------------
; D e m o . . .
; -----------------------------------------------------------------------------
;MessageRequester ("Process32", "Убедись, что отладчик(debugger) включен!", #MB_ICONINFORMATION)
; -----------------------------------------------------------------------------
; Initialise (really just opening kernel32.dll!)...
; -----------------------------------------------------------------------------
If InitProcess32 ()
; -------------------------------------------------------------------------
; Get a snapshot of all running processes...
; -------------------------------------------------------------------------
snapshot = CreateProcessList ()
If snapshot
; ---------------------------------------------------------------------
; Get list of processes...
; ---------------------------------------------------------------------
If GetFirstProcess (snapshot)
Repeat
result = GetNextProcess (snapshot)
Until result = #False
EndIf
; ---------------------------------------------------------------------
; Iterate through Proc32 () list, and act on process data here...
; ---------------------------------------------------------------------
ResetList (Proc32 ())
While NextElement (Proc32 ())
; Example of accessing PROCESSENTRY32 structure...
CountMem=GetProcessMem(Proc32 ()\th32ProcessID)
Debug "Process ID: " + Str (Proc32 ()\th32ProcessID) + " (" + PeekS (@Proc32 ()\szExeFile) + ")" + " Память "+Str(CountMem/1024)+" кб"
Wend
; ---------------------------------------------------------------------
; Free snapshot/list of processes...
; ---------------------------------------------------------------------
FreeProcessList (snapshot)
EndIf
; -------------------------------------------------------------------------
; Close kernel32.dll...
; -------------------------------------------------------------------------
CloseProcess32 ()
EndIfПоделиться317.02.2010 21:51:54
Спасибо. У меня просто появилась мысль для себя сделать прогу, которая будет вырубать процесс, серьезно перегрузивший систему, по нажатию нужных клавиш.
Поделиться417.02.2010 22:49:05
Сам по себе процесс не может повесить систему, разве что если у него будет приоритет реального времени!
А если повесит, то в месте с твоей прогой.
Поделиться517.02.2010 23:29:27
Получается, эта затея пустая.....
Страница: 1
Похожие темы
| STM32F103C8T6 - FreeRTOS | Программирование микроконтроллеров | 19.07.2017 |
| Вопросы новичка | Вопросы по PureBasic | 23.12.2010 |
| температура проца Intel Atom | Вопросы по PureBasic | 07.06.2011 |