Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Расчет времени... [D5, D6, Win95/98, WinXP]


Страницы:   1 2

BAHO ©   (2002-05-07 00:23:00) 

Подскажите пожалуйста как решить проблему неточности таймера Delphi
Требуется написать функцию которая высчитывает сколько времени осталось до конца отрезка времени, если известно: текущее время и величина отрезка времени... И необходимо учитывать переход с 23:59:59 на 00:00:00...
Сам я эту проблему уже решил но потом пропали исходники и некак не вспомню чего же я там замутил...
Заранее спасибо...


BAHO   (2002-05-13 05:22:00) [1]


> Anatoly Podgoretsky © (13.05.02 01:40)
> T := Now + strtotime("10:00:00")
> Далее делаешь обратный отсчет
> T - Now

Попробывал...
время скачит и всё... чегото не так...

а можно подробнее
типа:
var
a:tdatetime; //Осталось времени всего

function t:tdatetime;
var
b:tdatetime; //когда закончится
begin
b:=Now+a; //узнаём когда закончится
result:=?????? //узнаём скока осталось всего
end;
...
a:=t;


BAHO   (2002-05-13 04:24:00) [2]


> Aleks1

Зато я определил какая не нужна...:)
Просто я пишу одну прогу так сказать подымаю уровень знаний
и пытаюсь как можно продуманее написать
чтобы люди которые (может быть)воспользуются
не сказали что типа гадость какая-то
или чтото типа глючная прога и программер тупой...:)

но прога я надеюсь нужная получится...


Aleks1   (2002-05-13 03:08:00) [3]

>А как с точностью...?
>потерь не будет ?

"Так как с Джавдетом? Может помочь?
- Нет Джавдет мой. Встретишь - не трогай его" :)))

А что с точностью? Ты ведь пока еще ни разу не определил - какая точность тебе нужна.


BAHO   (2002-05-13 02:19:00) [4]

Круто...
А как с точностью...?
потерь не будет ?


Anatoly Podgoretsky   (2002-05-13 01:40:00) [5]

T := Now+ strtotime("10:00:00")
Далее делаешь обратный отсчет
T - Now


BAHO   (2002-05-13 01:17:00) [6]

Имеется ввиду что 10:00:00 это общее время а не константа...!
поэтому при уменьшении общего времени конец его не будет отдаляться с каждой секундой...
(Time+strtotime(переменная ОБЩЕЕ ВРЕМЯ))


BAHO   (2002-05-13 01:13:00) [7]

Есть время, допустим 10:00:00
требуется соорудить нечто вроде обратного отсчета
типа 09:59:59 09:59:58..57..56..55 и т.д.
отталкиваясь тока от общего времени (10:00:00)
и от реального Time...
причем время конца я узнаю так: Time+strtotime("10:00:00")

А требуеться узнавать каждую секунду
скока времени осталось до Time+strtotime("10:00:00")

Только нада учитывать переход времени
с 23:59:59 на 00:00:00 !!!
Причем все это надо реализовать без помощи стандартных
процедур и функций... Теперь понятно...?


Anatoly Podgoretsky   (2002-05-11 11:08:00) [8]

Начни объяснение сначала, простыми словами и с примером того, что хочешь получить, примерно так

Есть время, допустим 10:00:00 и далее


Aleks1   (2002-05-11 03:01:00) [9]

Ну вот теперь совершенно не понятно, что тебе нужно?


BAHO   (2002-05-11 00:31:00) [10]

Помню только что я отталкивался тока от оставшегося времени и реального...


Anatoly Podgoretsky   (2002-05-10 08:32:00) [11]

Лучше Now, если интервалы больше одной секунды


KilkennyCat   (2002-05-10 04:56:00) [12]

GetTickCount


Aleks1   (2002-05-10 02:32:00) [13]

"Верной дорогой идете товарищи!"
Цитата не моя!
Если вспомнишь, то все же, лучше вернуться в старый добрый DOS.


BAHO   (2002-05-10 01:43:00) [14]

Ладно буду сам вспоминать помоему я на правильном пути...
Спасибо всем...


Aleks1   (2002-05-09 02:55:00) [15]

Увы, ты прав :(
Windows не гонит в Реал Тайм.
Хотя "десятки" секунд - это, по-моему, перебор.


BAHO   (2002-05-09 00:12:00) [16]


> ole

Ну а если система подвиснет секунд на 20
то по идее Thread ожидая своей очереди выполнения
прозевает 20 сек.

Или я не прав ?


ole   (2002-05-08 09:34:00) [17]

Стоит использовать не Таймер, а Thread с достаточно высоким уровнем (типа Normal), в Execute которого описать такую вещь:
Var
E:TEvent;
...
Begin
E:=TEvent.Create(Nil,True,False,"My Event #1");
While Not Terminated Do
Begin
E.WaitFor(1000); //ждать секунду
//Здесь выполнять то, что нужно... Synchronize(...)
End;
E.Free;
End;
Это работает гораздо надежнее компонента Таймер. И точнее.


Aleks1   (2002-05-08 02:59:00) [18]

Ну ты сказал, т.е. объяснил!
"время кончится гораздо позже чем 10:00:01" !!!.
Время никогда не кончится - оно вечно! (Ну сказал! Бурные апплодисменты).

Может быть тебя интересуют малые интервалы времени. (Меньше, равно периоду стандартного таймера системы)?


BAHO   (2002-05-08 00:48:00) [19]

Я в ассемблере не шарю...
может и згодится спасибо...


> Aleks1
> Что есть - "неточность" таймера Delphi?

Если делать так

var
t:tdatetime
...
t:=strtotime("10:00:01")
...
procedure Tform1.Timer1Timer(Sender: TObject);
begin
t:=t-strtotime("00:00:01");
end;

то в t время кончится гораздо позже чем 10:00:01;


poisn   (2002-05-07 04:57:00) [20]

var DelayTime:integer = 1000;
StartT,CurFREQ:extended;

function GetTime:extended;
var timerlo,timerhi:dword;
begin
asm
dw 310Fh
mov TimerLo, eax
mov TimerHi, edx
end;
Result:=(4294967296*timerhi+timerlo-StartT)/curFreq;
end;

procedure StartTimer;
var timerlo,timerhi:dword;
begin
Sleep(10);
asm
dw 310Fh // rdtsc
mov TimerLo, eax
mov TimerHi, edx
end;
StartT:=4294967296*timerhi+timerlo;
Sleep(DelayTime);
asm
dw 310Fh // rdtsc
sub eax, TimerLo
sbb edx, TimerHi
mov TimerLo, eax
mov TimerHi, edx
end;
CurFreq:=(4294967296*timerhi+timerlo)*1000/DelayTime;
end;

Вот написал себе таймер для игрухи, думаю он имеет очень высокую точность зависющую только от частоты твоего проца ( правда на старых машинах он не пойдет)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо