Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Вниз

Память, занятая процессом   Найти похожие ветки 

 
Unknown   (2004-01-07 09:17) [0]

Человеки! У меня вопрос.
Имеется процесс, мною запущенный. Нужно посчитать сколько памяти он занимает, а заодно и процессорное время, которое потратил. Вот и весь вопрос.


 
Delphi5.01   (2004-01-07 10:15) [1]

Удалено модератором
Примечание: Задай свой вопрос в отдельной ветке


 
Unknown   (2004-01-07 11:08) [2]

Удалено модератором
Примечание: Создание пустых сообщений


 
Delphi5.01   (2004-01-08 07:34) [3]

Удалено модератором


 
Unax   (2004-01-08 11:12) [4]

Это можно сделать с помощью ToolHelp функций. Пример написанный в C++ Builder:

// Для использования ToolHelp нужно подключить след. заголовки
#include <pdh.h>
#include <tlhelp32.h>

HQUERY hQuery;
HCOUNTER phCounter;
PDH_FMT_COUNTERVALUE *lpItemBuffer;
PDH_STATUS pdh;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
lpItemBuffer = (PDH_FMT_COUNTERVALUE *) GlobalAlloc
(GPTR, sizeof(PDH_FMT_COUNTERVALUE));
pdh = PdhOpenQuery(NULL,11,&hQuery);
if (pdh == ERROR_SUCCESS) {
char * szCounter = "\\Процесс(explorer)\\% работы в пользовательском режиме";
pdh = PdhAddCounter(hQuery, szCounter, 0, &phCounter);
}
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
pdh = PdhCollectQueryData(hQuery);
pdh = PdhGetFormattedCounterValue (phCounter,
PDH_FMT_DOUBLE,
NULL,
lpItemBuffer);
if (pdh == ERROR_SUCCESS) ShowMessage(FloatToStr(lpItemBuffer->doubleValue));

}


В общем по нажатию кнопки выскакивает окошечко в котором показывается процент работы процесса "explorer" в пользовательском режиме. Там еще есть куча счетчиков, которые ты можешь посмотреть в панели управления -> администрирование -> быстродействие.


 
Unknown   (2004-01-08 11:45) [5]

А где в Delphi валяются объявления функций PDH?


 
Unax   (2004-01-08 12:03) [6]

В том то и прикол, что в Delphi я не нашел модуля PDH, поэтому и писал на C++. Если хочешь на Delphi придется самому писать модуль PDH. В принципе реально, если тебе не нужны все функции. Там всего то объявить несколько структур и прототипов функций. Кстати все PDH функции экспортируются из pdh.dll.


 
Unknown   (2004-01-08 12:42) [7]

Ну хорошо. Я попробовал. Но вот в чем фигня:
"% работы в пользовательском режиме" - процент в текущий момент.
"Прошло времения (сек)" - всего с момента запуска.

Как мне подсчитать количество миллисекунд прошедших с мометна запуска процесса, которые потратил процессор на выполнение инструкций этого процесса.

К примеру, нужно чтобы, скажем после того, как процессор уделил процессу 3000 мсек, я бы его Ternimate.

В приложении несколько нитей (Thread), запускаются параллельно. Естественно, что если с момента запуска нити прошло 90 сек, это не значит, что все 90 сек она загружала процессор на 100%


 
Unknown   (2004-01-08 12:46) [8]

Кстати, каждая нить запускает процесс (Exe).


 
Игорь Шевченко   (2004-01-08 13:00) [9]


> К примеру, нужно чтобы, скажем после того, как процессор
> уделил процессу 3000 мсек, я бы его Ternimate.


Для Win2k, WinXP посмотри на Job, там можно задавать пределы процессорного времени для процесса.


 
Unknown   (2004-01-08 13:38) [10]

Уважаемый Игорь Шевченко. Поясните, пожалуйста, что такое Job.


 
Игорь Шевченко   (2004-01-08 13:48) [11]

Unknown (08.01.04 13:38)

A job object allows groups of processes to be managed as a unit. Job objects are namable, securable, sharable objects that control attributes of the processes associated with them. Operations performed on the job object affect all processes associated with the job object.

To create a job object, use the CreateJobObject function. When the job is created, there are no associated processes. To associate a process with a job, use the AssignProcessToJobObject function. After you associate a process with a job, the association cannot be broken. By default, processes created by a process associated with a job (child processes) are associated with the job. If the job has the extended limit JOB_OBJECT_LIMIT_BREAKAWAY_OK and the process was created with the CREATE_BREAKAWAY_FROM_JOB flag, its child processess are not associated with the job. If the job has the extended limit JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK, no child processes are associated with the job.

To determine if a process is running in a job, use the IsProcessInJob function.

A job can enforce limits on each associated process, such as the working set size, process priority, end-of-job time limit, and so on. To set limits for a job object, use the SetInformationJobObject function. If a process associated with a job attempts to increase its working set size or process priority, the function calls are silently ignored.

The job object also records basic accounting information for all its associated processes, including those that have terminated. To retrieve this accounting information, use the QueryInformationJobObject function.

To terminate all processes currently associated with a job object, use the TerminateJobObject function.

To close a job object handle, use the CloseHandle function. The job object is destroyed when its last handle has been closed. If there are running processes still associated with the job when it is destroyed, they will continue to run even after the job is destroyed.


 
Unax   (2004-01-08 14:17) [12]

2 Игорь Шевченко: Кстати функция CreateJobObject в Windows.pas тоже не описана. А вообще согласен, что Job лучше всего подходит для ограничения процессорного времени процессу.


 
Unknown   (2004-01-08 14:44) [13]

А как же память?
Как ее посчитать?


 
Unknown   (2004-01-08 14:48) [14]

И хотелось бы какой-нибудь примерчик для Job, если можно?


 
Игорь Шевченко   (2004-01-08 14:51) [15]

Unax © (08.01.04 14:17)


> Кстати функция CreateJobObject в Windows.pas тоже не описана


www.delphi-jedi.org - win32api.zip



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.03.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.014 c
1-43557
AlexanderVasjuk
2004-03-03 18:02
2004.03.14
Предложите компонент а ля Панель Outlook


8-43698
MiZiS
2003-11-10 16:44
2004.03.14
Как програмно узнать загружена ли картинка в TImage???


1-43562
MasterKolyan
2004-02-27 14:19
2004.03.14
Как создать событие на изменение своей переменной


14-43855
тихий вовочка
2004-02-21 11:45
2004.03.14
По-моему непосильная работа


14-43879
Dimchik
2004-02-20 17:19
2004.03.14
КУому нужны книги по Delphi милости просим





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский