Главная страница
    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.46 MB
Время: 0.008 c
3-53398
NoName
2004-01-27 03:50
2004.02.17
Проблема с запросом


14-53734
kull
2004-01-30 13:00
2004.02.17
Этолт безумный мир...


1-53578
Norfolk
2004-02-07 12:19
2004.02.17
Генератор случайных чисел


8-53654
Ivan Voronov
2003-10-15 14:11
2004.02.17
Точка внутри замкнутого контура


1-53612
дурак
2004-02-09 14:41
2004.02.17
q3text





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