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