![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как посчитать время работы потока?
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
под мастдаем - точно, видимо, никак