Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как посчитать время работы потока?


kofman ©   (2003-01-09 16:03:00) 

Мастера помогите пожалуйста, у меня есть 3 потока каждый из которых запускается и останавливается в произвольные моменты времени, в каждый момент времени могут работать и один поток и два и три вместе, в связи с чем такой вопрос - как посчитать сколько времени работал каждый поток в отдельности за какой-то фиксированный промежуток времени? Заранее спасибо.


kofman   (2003-01-10 23:10:00) [1]

Всем спасибо за идеи, попробую реализовать.


Zemal   (2003-01-09 17:19:00) [2]

passm >> Термин БД я использовал как элементарное понятие, т.е. в смысле храненилище данных :). Это может быть и текстовый файл на диске :). Я хотел сказать, что нет смысла их куда-то записывать... легче просто массивом или списком воспользоваться :). Меня ввело в заблуждение использование термина "Здесь без ЛОГА не обойтись".


passm   (2003-01-09 17:02:00) [3]

Zemal © (09.01.03 16:47)> Нет, почему же в БД? Откуда такое предположение? Это наверняка будет неоправдано ("наверняка", потому что неивестно предназначение приложения). Использование TList"а достаточно.


Zemal   (2003-01-09 17:00:00) [4]

RWolf >> т.е. надо подсчитать сколько ПРОЦЕССОРНОГО времени занял каждый поток?! Это я понял уже :). Как такое сделать - незнаю. Это, похоже, на асме делать придётся :), а я его плохо знаю... помню где-то видел такой кусок кода на асме, который возвращал процессорное время... где - непомню :(... знаю только что есть такая процессорная директива, но она разная может быть для каждого типа проца :(.


RWolf   (2003-01-09 16:49:00) [5]

Zemal
Зачем - это к kofman"у ;)

> вопрос - как посчитать сколько времени работал каждый поток в отдельности


Zemal   (2003-01-09 16:47:00) [6]

Ну если нужно засекать чистое процессорное время, то да... согласен... только зачем это надо??? Для определения "трудоёмкости" потоков??? Типа как процессор усирается обслуживая тот или иной поток??? Этого я никогда не делал :(.
passm >> А лог ты предлагаешь использовать как БД для фиксации времени??? Зачем??? Можно фиксировать время и в полях потока или массиве :).


passm   (2003-01-09 16:38:00) [7]

Zemal © (09.01.03 16:29)> Насколько я понял из вопроса, может понадобиться расчет, например, сколько времени работал такой-то поток с 08.01.2003 12:30:00 по 08.01.2003 13:21:30. Здесь, IMHO, без лога не обойтись.


RWolf   (2003-01-09 16:37:00) [8]

Zemal
если я правильно понял kofman, ему нужно определить, сколько поток занял чистого процессорного времени; засечки по реальному времени такой информации не дадут, т.к. windows - система многозадачная.
GetThreadTimes по NT как раз такую информацию возвращает.


Zemal   (2003-01-09 16:29:00) [9]

Опиши свой класс потока и его поля для фиксации системного времени. При создании фиксируй время начала работы потока, а при остановке вычисляй интервал и запоминай, при выходе из спящего режима опять фиксируй время в полях своего экземпляра потока. В конце работы суммируй все интервалы и получай время работы... и делай с ним чё хошь :). Неужели это так сложно?! Или вариант сложнее: посылай определённое сообщение основному кодовому потоку (VCL-потоку), а он пусть фиксирует время создания, вычитает интервал остановки потока... при уничтожении потока пусть делает необходимые вычисления и выводит время работы твоих потоков. Я невижу в этом особой проблемы.


passm   (2003-01-09 16:10:00) [10]

kofman © (09.01.03 16:03)> Видимо, придется вести логи работы потоков (время старта и остановки).


RWolf   (2003-01-09 16:06:00) [11]

Если дело было по NT - GetThreadTimes
под мастдаем - точно, видимо, никак


Наверх

Титульная страница Поиск, карта сайта Написать письмо