Как узнать какой процесс на сколько загружает процессор? И попутный вопрос как узнать на сколько он загружает оперативную память? Конечно же программно . Диспетчер задач не предлагать.
Загруженность процессора
Страница: 1
Сообщений 1 страница 5 из 5
Поделиться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 |