Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
Внизточное отслеживание времени Найти похожие ветки
← →
tickler (2006-04-30 21:24) [0]Как организовать точное слежение за временем? Таймер дает заметную задержку уже через несколько секунд. Нужно знать сколько прошло милисекунд с момента запуска программы.
← →
Zeqfreed © (2006-04-30 21:39) [1]
Now()
← →
Юрий Зотов © (2006-04-30 21:42) [2]Cм. ф-ции Date, Time, GetTickCount. При запуске вызываем и запоминаем результат. Потом снова вызываем и вычисляем искомое.
← →
tickler (2006-04-30 21:44) [3]спасибо =)
← →
Anatoly Podgoretsky © (2006-04-30 23:24) [4]Таймер не для отслеживания времени, а для получения интервалов с той или другой погрешностью.
Для точного отслеживания времени используй GetPerformanceCounter или в крайнем случае GetTickCount
← →
DevilDevil © (2006-05-01 01:40) [5]
var
StartTickCount : integer;
// OnCreate
StartTickCount := GetTickCount;
...
// функция возвращает время работы приложения в миллисекундах
function GetWorkTime : integer;
begin
Result := GetTickCount - StartTickCount;
end;
← →
Юрий Зотов © (2006-05-01 02:11) [6]> DevilDevil © (01.05.06 01:40) [5]
> функция возвращает время работы приложения в миллисекундах
ЭТА функция возвращает время работы СИСТЕМЫ с момента старта приложения.
Само же приложение за все это время могло ни разу не получить процессорного времени. То есть, все это время оно могло не работать.
← →
DevilDevil © (2006-05-03 20:33) [7]Юрий Зотов © (01.05.06 02:11) [6]
ммм... ДА... Случай непростой...
> ЭТА функция возвращает время работы СИСТЕМЫ с момента старта приложения.
Юрий, честно говоря, не думаю, что я ламер в программировании... Позволю себе предположить, что если приложение не получает процессорного времени, то не происходит событияTForm.OnCreate
...
Ну и обращения к функции (GetWorkTime
) тоже не будет, если приложение не получило процессорного времени...
В остальных случаях всё должно работать верно. НО всё с точностью до 10 миллисекунд
И думаю так. Если не прав - уж извиняйте, но, будьте добры, распишите поподробнее
← →
GanibalLector © (2006-05-03 20:43) [8]2 DevilDevil © (03.05.06 20:33) [7]
Все дело в том,что у процессов и потоков есть ПРИОРИТЕТЫ. За подробностями к дяде Рихтеру.
← →
Zeqfreed © (2006-05-03 21:51) [9][7] DevilDevil © (03.05.06 20:33)
Твоя ф-ция возвратит с некоторой точностью количество миллисекунд, прошедших между вызовами GetTickCount, и ничего иного.
← →
DevilDevil © (2006-05-03 23:31) [10]Возможно, это покажется слишком резко, но подругому выразить пока не могу: "Похоже, сохраняется тенденция ПОУМНИЧАТЬ"
> GanibalLector © (03.05.06 20:43) [8]
ну и что? Всё равно, лучшее решение врядли существует. У тебя иное мнение?
> Zeqfreed © (03.05.06 21:51) [9]
> Твоя ф-ция возвратит с некоторой точностью количество миллисекунд, прошедших между вызовами GetTickCount, и ничего иного.
не скажу, что ты неправ. Именно это количество миллисекунд и является временем работы приложения. Не веришь? Тогда для почитай хотя бы справку по функции GetTickCount. Там будет чёрным по белому, что функция возвращает количество миллисекунд, прошедших с начала загрузки винды...
Вспоминаем 6й класс. На отрезке времени сначало произошло событие a (StartTickCount), спустя время произошло событие b. Вопрос: как определить, сколько времени прошло между a и b? Правильно, ребята: a - b...
А если бы ты написал хоть одно более-менее анимационное приложение, или почитал литературу для начинающих, то понял бы, что использование GetTickCount для точного определения временных промежутков - ОПТИМАЛЬНО, и не умничал направо-налево...
В общем, давайте жить дружно, выражаться не резко и максимально понятно выражать свои мысли
С Уважением
← →
Германн © (2006-05-04 02:40) [11]
> DevilDevil © (03.05.06 23:31) [10]
>
> Возможно, это покажется слишком резко, но подругому выразить
> пока не могу: "Похоже, сохраняется тенденция ПОУМНИЧАТЬ"
>
Не показалось, поскольку не видел тенденции.
Ну ошибся Юрий. Время-то позднее было. :-(
← →
Германн © (2006-05-04 02:44) [12]2 DevilDevil © (03.05.06 23:31) [10]
Но не откажись и заметить, что сабж невозможно решить средствами Windows!
← →
begin...end © (2006-05-04 08:32) [13]> DevilDevil © (03.05.06 23:31) [10]
>> Твоя ф-ция возвратит с некоторой точностью количество
>> миллисекунд, прошедших между вызовами GetTickCount, и ничего
>> иного.
> не скажу, что ты неправ. Именно это количество миллисекунд
> и является временем работы приложения.
Пришли как-то в 8 утра на работу два грузчика -- Вася и Федя. А ушли -- в 5 вечера.
Вася за это время разгрузил три грузовика, а Федя -- ни одного. Потому как не работалось Феде после вчерашнего...
По-Вашему, получается, что Вася и Федя РАБОТАЛИ одинаковое количество времени. А по-моему, получается, что Вася работал 9 часов минус перекуры и перерывы, а Федя не работал вовсе.
Так же и с программами. Есть время, которое прошло с момента создания процесса, а есть время его работы. И это совершенно разные вещи, потому что система выделяет процессорное время не только Вашей программе. И поэтому не всё то время, что прошло с момента запуска программы, она (программа) именно работает.
Время, прошедшее с момента старта процесса, можно вычислить, если из текущего времени вычесть время его создания. А время его создания можно получить, вызвав GetProcessTimes (см. параметр lpCreationTime). Эта же функция сообщает и время работы процесса -- user- и kernel-time. См. справку.
← →
DevilDevil © (2006-05-04 17:07) [14]begin...end © (04.05.06 08:32) [13]
Вот это я считаю ответом!
НО, мой вариант попроще в понимании, достаточно точен и эффективен - точнее работы с TDateTime, как предлагал Zeqfreed. Собственно, и игры пишутся используя GetTickCount
Честно говоря, хотелось бы услышать мнение автора вопроса
← →
Юрий Зотов © (2006-05-05 01:01) [15]> Германн © (04.05.06 02:40) [11]
> Ну ошибся Юрий. Время-то позднее было.
Второе - да. А первое - эт вряд ли, как говорил тов. Сухов.
> DevilDevil © (03.05.06 20:33) [7]
> не думаю, что я ламер в программировании...
> будьте добры, распишите поподробнее
Именно не считая Вас ламером в программировании, я и не стал расписывать подробнее совершенно очевидные для НЕламеров вещи. Полагая, что для Вас они тоже совершенно очевидны.
Их расписал begin...end в [13]. Остается только повторить, что разница между двумя вызовами GetTickCount дает время работы системы, но о реальном времени работы приложения не говорит ничего.
К тому же, при использовании GetTickCount надо учитывать еще и возможный переход через максимум для DWORD.
← →
Германн © (2006-05-05 02:47) [16]
> Юрий Зотов © (05.05.06 01:01) [15]
>
> > Германн © (04.05.06 02:40) [11]
> > Ну ошибся Юрий. Время-то позднее было.
>
> Второе - да. А первое - эт вряд ли, как говорил тов. Сухов.
>
Ну а первое - это действительно "врядли"! "Специалист", вроде тебя, никогда и ни за что, не позволит подловить себя! :-)
Как и т. Сухов. :-)
Тут главное (на форуме) - выдержать "нужную" паузу.
← →
Германн © (2006-05-05 03:34) [17]
> Германн © (05.05.06 02:47) [16]
Пардон, забыл "заключающий" смайлик.
← →
Sergio77 (2006-05-05 04:01) [18]> DevilDevil
если не ошибаюсь, то b - a ;)
← →
Anatoly Podgoretsky © (2006-05-05 15:56) [19]Юрий Зотов © (05.05.06 01:01) [15]
Именно не считая Вас ламером в программировании, я и не стал расписывать подробнее совершенно очевидные для НЕламеров вещи. Полагая, что для Вас они тоже совершенно очевидны.
Их расписал begin...end в [13].
Намекаешь, что посчитал ламером? Ну так выходит согласно логики.
← →
Anatoly Podgoretsky © (2006-05-05 15:58) [20]Кстати а откуда взялось время работы программы?
Вопрос то "Нужно знать сколько прошло милисекунд с момента запуска программы.", вроде как одназначно?
← →
DevilDevil © (2006-05-06 18:45) [21]Sergio77 (05.05.06 04:01) [18]
Совершенно верно ;)
Юрий Зотов © (05.05.06 01:01) [15]
Германн © (05.05.06 03:34) [17]
Anatoly Podgoretsky © (05.05.06 15:58) [20]
no comments
Хотя, нет... Поумничать вы любите
← →
Anatoly Podgoretsky © (2006-05-06 20:38) [22]А говоришь - no comments
← →
Германн © (2006-05-07 02:06) [23]
> Anatoly Podgoretsky © (05.05.06 15:58) [20]
>
> Кстати а откуда взялось время работы программы?
> Вопрос то "Нужно знать сколько прошло милисекунд с момента
> запуска программы.", вроде как одназначно?
> <Цитата>
> DevilDevil © (06.05.06 18:45) [21]
>
> Юрий Зотов © (05.05.06 01:01) [15]
> Германн © (05.05.06 03:34) [17]
> Anatoly Podgoretsky © (05.05.06 15:58) [20]
> no comments
Ой врёшь!
"откуда взялось время работы программы" - так из твоего поста[5]:
// функция возвращает время работы приложения в миллисекундах
function GetWorkTime : integer;
Сам расжёг костёр - сам и туши! :-)
← →
DrPass © (2006-05-07 02:21) [24]/*извините, что вмешиваюсь в разговор умных людей*/
...но "время работы приложения" всеми нормальными людьми (не "суперпрофессиональными" программистами) употребляется в значении "время, которое прошло с момента запуска приложения", и не надо его путать с "процессорным временем". А поумничать тут действительно любят. Самое интересное, что народ прекрасно понимает, что имел в виду спрашивающий человек. Но отказать себе в удовольствии повыпендриваться, увы, не может практически никто. Это так, злой оффтопик о плохом поведении на форуме :-)
← →
Германн © (2006-05-07 02:31) [25]
> DrPass © (07.05.06 02:21) [24]
>
> /*извините, что вмешиваюсь в разговор умных людей*/
> ...но "время работы приложения" всеми нормальными людьми
> (не "суперпрофессиональными" программистами) употребляется
> в значении "время, которое прошло с момента запуска приложения",
> и не надо его путать с "процессорным временем". А поумничать
> тут действительно любят. Самое интересное, что народ прекрасно
> понимает, что имел в виду спрашивающий человек. Но отказать
> себе в удовольствии повыпендриваться, увы, не может практически
> никто. Это так, злой оффтопик о плохом поведении на форуме
> :-)
Заметь пожалуйста, что сам ответ на вопрос ограничивается ответами с [1] по [4].
Автор сабжа исчез после [3], так что уж не обессудь! Ведь далее обсуждался не вопрос автора, а некоторые спорные заявления прочих субъектов.
← →
DrPass © (2006-05-07 03:03) [26]
> Германн © (07.05.06 02:31) [25]
Это я так, поворчать просто захотелось :-)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.013 c