Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.21;
Скачать: CL | DM;

Вниз

точное отслеживание времени   Найти похожие ветки 

 
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. Там будет чёрным по белому, что функция возвращает количество миллисекунд, прошедших с начала загрузки винды...
Вспоминаем класс. На отрезке времени сначало произошло событие 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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.146 c
2-1146567183
Id
2006-05-02 14:53
2006.05.21
Взаимодействие баз данных в пределах одного запроса


2-1146493728
AlexanderMS
2006-05-01 18:28
2006.05.21
Выбранный элемент ListBox теряет фокус


15-1145979833
Некто
2006-04-25 19:43
2006.05.21
Архитектуры ПО


3-1143191600
kley
2006-03-24 12:13
2006.05.21
замена нулей


3-1143617371
ivc_andr
2006-03-29 11:29
2006.05.21
SQL-DMO