Главная страница
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.014 c
4-53811
comwad
2003-12-11 09:08
2004.02.17
Какие *.pas при использовании функции DeviceIoControl нужны?


8-53659
kvp
2003-10-20 12:51
2004.02.17
Повернуть элипс на произвольный угол


6-53686
webpauk
2003-12-15 13:30
2004.02.17
определение OS на компах в сети


1-53581
maxic
2004-02-08 18:56
2004.02.17
Статус окна


3-53414
NewD
2004-01-26 06:54
2004.02.17
Глюк Ado в Акцессе