![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Насчет Таймера.... [D5, Win95/98, Win2k]
TankMan © (2002-11-09 16:05:00)Я вот не пойму, ставлю интервал 1000, но он что не равен 1 секунде? Когда интервал 1000 таймер срабатывает не через 1 секунду, а через 0.9 сек. может быть, или так,но уж точно не через 1 сек. а в чем дело? может так и должно быть? или скажите тогда в чем проблема, мне нужно, чтобы таймер срабатывал ровно через каждую секунду, а не 0.9... что делать?
Николай Быков (2002-11-10 02:56:00) [1]Я когда делал часы, то просто синхронизировал свой таймер с часами Windows постоянно:
var tine:_SYSTEMTIME;
....................
getsystemtime(time);
timer1.Interval:=1000-time.wMilliseconds;
....................
Тогда у меня таймер срабатывал каждую секунду
Beglec (2002-11-10 02:21:00) [2]Компоненто с точным таймером море в кладовке.
А то что Timer в Delphi был не точный, дык это было с Delphi 1 и по сей день.
А вообще чисто теоритически, на компьютере не может быть идеально точного таймера.
Всегда может возникнуть процесс который займет 100% времени и твоему приложению может не достаться процессорное время в нужный момент.
Так что лучше менять алгоритм программы, с учетом погрешности таймера.
В данный момент все свои проги решаю именно таким способом.
Так что +1 -1 секунда для меня не страшно.
ULTRIX (2002-11-10 00:59:00) [3]2TankMan если уж на то пошло, то используй таймер для обращения системного времени, т.к. по твоим словам "часики в виндах идут вроде правильно". Проблема отпадает сама собой.
Далее - каким образом выводишь в лайбел время? Может используется функция целого числа и т.д...
TankMan (2002-11-10 00:11:00) [4]Спосибо... ну ошибся я значит с "медленее или быстрее" но не суть в этом, я спрашивал, как сделать более точный. Ответили. Спасибо за внимание.
З.Ы.
>>Ihor Osov"yak
Например ты тоже ошибаешься, о 0.8 и речи не шло... было о 0.9 посмотри внимательнее :)
Hirara (2002-11-10 00:08:00) [5]я где то читал что таймер в делфе равен не 1 Мсек, а чото типа 0.8, если очень нужно могу книженцию порыть, вроде там видел, но только она про 5 делфю
Ihor Osov'yak (2002-11-09 23:47:00) [6]2 TankMan © (09.11.02 23:38)
см TTCustomDelphiMaster © (09.11.02 16:36) - он прав.
А Вы, молодой человек, постарайтесь понять, что 30 разделить на 28 несколько больше единицы. Это по поводу ваших 0.8 сек
А про критерий "чуть" - забудте. Если чего - то кажется - то можно перекристится. Иногда помагает.
Если нужен более точній отсчет - юзайте мультимедиатаймер. Но все же имейте ввиду, что виндовс - не система реального времени.
TankMan (2002-11-09 23:38:00) [7]Значит никто эту проблему и не решал?... ясно...
Alex44 (2002-11-09 22:30:00) [8]Ya slyshal, chto multimedia timer"y tochnee, no sam tolkom nichego ne znayu. S drugoj stotony, zachem Vam eto nuzhno? V smysle, zachem samomu vremya schitat"? Prosto vyvodite po timer"u libo systemnoe vremya, libo chto-nibud" svyazannoe s TickCount. Togda vyvedennuj resultatbudet tochnym, a uzh budet on vyvodit"sya chut" chashe ili chut" rezhe, ne tak uzh i vazhno.
TankMan (2002-11-09 22:17:00) [9]Я определил? Он в некоторых случаях больше в некоторых меньше 1 сек. - Я поставил выводить время на лейбле, интервал таймера 1000 и запускал прожку, открыв часы понаблюдал - стрелки часов в виндах нормально идут.. я прав? вот и секунды менялись в программке чуть раньше, чем на часах, и с каждой секундой, часы в программке сбивались... вобщем не в этом вопрос, как я определил, но в том, что это однозначно - спора нет. ААА... вот... я ставлю таймер с интервалом 1000 повторяю 30 раз, и когда он повторит ~28 раз на часах проходит 30 сек.
А как сделать так, чтобы ровно каждую секунду он срабатывал или можть таймер другой где взять?
The_Vizit0r! (2002-11-09 16:52:00) [10]В зависимости от загруженности систему интервал 1000 может был от 0.8 до 10 сек.
TTCustomDelphiMaster (2002-11-09 16:36:00) [11]Позже может, но раньше не должен срабатывать.
iNew (2002-11-09 16:09:00) [12]А как ты определил, что через 0.9 ?