Форум: "Основная";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
ВнизКак посчитать время работы потока? Найти похожие ветки
← →
kofman (2003-01-09 16:03) [0]Мастера помогите пожалуйста, у меня есть 3 потока каждый из которых запускается и останавливается в произвольные моменты времени, в каждый момент времени могут работать и один поток и два и три вместе, в связи с чем такой вопрос - как посчитать сколько времени работал каждый поток в отдельности за какой-то фиксированный промежуток времени? Заранее спасибо.
← →
RWolf (2003-01-09 16:06) [1]Если дело было по NT - GetThreadTimes
под мастдаем - точно, видимо, никак
← →
passm (2003-01-09 16:10) [2]kofman © (09.01.03 16:03)> Видимо, придется вести логи работы потоков (время старта и остановки).
← →
Zemal (2003-01-09 16:29) [3]Опиши свой класс потока и его поля для фиксации системного времени. При создании фиксируй время начала работы потока, а при остановке вычисляй интервал и запоминай, при выходе из спящего режима опять фиксируй время в полях своего экземпляра потока. В конце работы суммируй все интервалы и получай время работы... и делай с ним чё хошь :). Неужели это так сложно?! Или вариант сложнее: посылай определённое сообщение основному кодовому потоку (VCL-потоку), а он пусть фиксирует время создания, вычитает интервал остановки потока... при уничтожении потока пусть делает необходимые вычисления и выводит время работы твоих потоков. Я невижу в этом особой проблемы.
← →
RWolf (2003-01-09 16:37) [4]Zemal
если я правильно понял kofman, ему нужно определить, сколько поток занял чистого процессорного времени; засечки по реальному времени такой информации не дадут, т.к. windows - система многозадачная.
GetThreadTimes по NT как раз такую информацию возвращает.
← →
passm (2003-01-09 16:38) [5]Zemal © (09.01.03 16:29)> Насколько я понял из вопроса, может понадобиться расчет, например, сколько времени работал такой-то поток с 08.01.2003 12:30:00 по 08.01.2003 13:21:30. Здесь, IMHO, без лога не обойтись.
← →
Zemal (2003-01-09 16:47) [6]Ну если нужно засекать чистое процессорное время, то да... согласен... только зачем это надо??? Для определения "трудоёмкости" потоков??? Типа как процессор усирается обслуживая тот или иной поток??? Этого я никогда не делал :(.
passm >> А лог ты предлагаешь использовать как БД для фиксации времени??? Зачем??? Можно фиксировать время и в полях потока или массиве :).
← →
RWolf (2003-01-09 16:49) [7]Zemal
Зачем - это к kofman"у ;)
> вопрос - как посчитать сколько времени работал каждый поток в отдельности
← →
Zemal (2003-01-09 17:00) [8]RWolf >> т.е. надо подсчитать сколько ПРОЦЕССОРНОГО времени занял каждый поток?! Это я понял уже :). Как такое сделать - незнаю. Это, похоже, на асме делать придётся :), а я его плохо знаю... помню где-то видел такой кусок кода на асме, который возвращал процессорное время... где - непомню :(... знаю только что есть такая процессорная директива, но она разная может быть для каждого типа проца :(.
← →
passm (2003-01-09 17:02) [9]Zemal © (09.01.03 16:47)> Нет, почему же в БД? Откуда такое предположение? Это наверняка будет неоправдано ("наверняка", потому что неивестно предназначение приложения). Использование TList"а достаточно.
← →
Zemal (2003-01-09 17:19) [10]passm >> Термин БД я использовал как элементарное понятие, т.е. в смысле храненилище данных :). Это может быть и текстовый файл на диске :). Я хотел сказать, что нет смысла их куда-то записывать... легче просто массивом или списком воспользоваться :). Меня ввело в заблуждение использование термина "Здесь без ЛОГА не обойтись".
← →
kofman (2003-01-10 23:10) [11]Всем спасибо за идеи, попробую реализовать.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c