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

Вниз

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

 
romeo ©   (2004-02-07 18:49) [0]

Данная программа должна "останавливать" системное время компьютера, отображая в TLabel время реальное. По завершении работы системное время восстанавливается.

var
StartTime: TDateTime;
SavedTime: TDateTime;

function SetPCSystemTime(tDate: TDateTime): Boolean;
var
TZI: TTimeZoneInformation;
ST: TSystemTime;
begin
GetTimeZoneInformation(TZI);
DateTimeToSystemTime(tDate + TZI.Bias / 1440, ST);
Result := SetSystemTime(ST);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
StartTime := Now;
SavedTime := 0;
Label1.Caption := TimetoStr(StartTime);
end;

procedure TForm1.Timer1Timer(Sender: TObject); // Timer1.Interval = 1000
begin
SavedTime := SavedTime + Now - StartTime;
SetPCSystemTime(StartTime);
Label1.Caption := TimeToStr(StartTime + SavedTime);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
SetPCSystemTime(StartTime + SavedTime);
end;


В общем, сия конструкция отстает за минуту приблизительно на 4 секунды. Отсюда - сабж.

З.Ы. Для тех кому интересно "А на фига все это надо?"
Принесли мне кино на DVD. Скачал себе BlazeDVD. Оказалась триальная версия (за регистрацию просят 40$) - через 10 мин (прямо так и написано в ейной справке) отрубается и надо заново ее запускать и т.д. Короче - гемор, а денег жалко.
В общем прогу я сделал, фильм посмотрел, а потом выяснилось, что часы на компе здорово отстали. Взял секундомер, засек время, решил написать сюда...


 
VMcL ©   (2004-02-07 18:53) [1]

>>romeo © (07.02.04 18:49)

Windows не является ОС реального времени. IMHO, единственное, что можно посоветовать - QueryPerformanceFrequency() + QueryPerformanceCounter().


 
romeo ©   (2004-02-07 19:18) [2]


> VMcL © (07.02.04 18:53) [1]

Это типа так, что-ли?

var
F, C1, C2: Integer;

QueryPerformanceFrequency(@F);

// в какой-то момент
QueryPerformanceCounter(@C1);

// а в другой
QueryPerformanceCounter(@C2);

// и время между ними
Result := (c2 - c1)/F;


И что получим, секунды?
Заранее спасибо...


 
VMcL ©   (2004-02-08 01:12) [3]

>И что получим, секунды?

Типа того :)

P.S> Result: Double, Single или Extended, надеюсь.


 
VMcL ©   (2004-02-08 01:14) [4]

>var
> F, C1, C2: Integer;

Doh!
F, C1, C2: Int64;

BOOL QueryPerformanceFrequency(

LARGE_INTEGER *lpFrequency // address of current frequency
);


 
VID ©   (2004-02-08 01:42) [5]

Удалено модератором
Примечание: Ты не перепутал сайт, с креками это не сюда



Страницы: 1 вся ветка

Текущий архив: 2004.02.17;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.019 c
3-53402
suric
2004-01-26 15:12
2004.02.17
InterBase и хранимые процедуры


14-53769
RealRascal
2004-01-22 16:37
2004.02.17
Про сканеры и цифровые мыльницы.


3-53356
Suntechnic
2004-01-27 19:23
2004.02.17
Oracle и транзакции.


14-53772
Danilka
2004-01-20 10:02
2004.02.17
Стивен Кинг Темная Башня


1-53540
КомофОнСамый
2004-02-05 14:07
2004.02.17
TRadioGroup - можно ли Items выстроить горизонтально?