Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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. Там будет чёрным по белому, что функция возвращает количество миллисекунд, прошедших с начала загрузки винды...
Вспоминаем класс. На отрезке времени сначало произошло событие 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.011 c
6-1132520314
Alex23xandR
2005-11-20 23:58
2006.05.21
Кто качает?


1-1144745826
MiHoY
2006-04-11 12:57
2006.05.21
поиск дочернего окна


15-1145616875
Deka
2006-04-21 14:54
2006.05.21
IDE Delphi перестала тормозить!


15-1145630756
dimodim
2006-04-21 18:45
2006.05.21
Как установить PHP под FreeBsd [последний]?


6-1137578474
ronyn
2006-01-18 13:01
2006.05.21
местоположение компа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский