Главная страница
    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.009 c
6-53681
hort
2003-11-11 21:49
2004.02.17
WAP-приложение.


1-53551
Karlson
2004-02-05 13:23
2004.02.17
компонент FormStorage библиотеки RxLib


3-53408
Bless
2004-01-26 17:20
2004.02.17
Как в BeforePost сделать, чтобы последующий Post не вызывался


4-53814
QUSTION
2003-12-12 12:17
2004.02.17
TreeView!!! ПАМАГИТЕ!


14-53754
Brahman
2004-01-27 13:54
2004.02.17
Дела обычные..





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