Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.007 c
3-53389
denis24
2004-01-27 10:19
2004.02.17
table1.checkopen


1-53534
Переяслов Григорий
2004-02-05 14:42
2004.02.17
Странное поведение тулбара


7-53793
Blamyr
2003-11-30 22:55
2004.02.17
Копирование файлов


3-53427
Alex_x
2004-01-26 10:03
2004.02.17
Как вставить (апостроф) в базу?


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский