Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Время (высокоточное)


Страницы:   1 2

Чегермек ©   (2002-11-30 20:55:00) 

Знает ли кто-нить, как померить интервалы времени с точностью до десятков мкс?


MBo   (2002-12-02 13:40:00) [21]

>Igor1984
Может, кто и гонит....

Вызвать событие через точный интервал времени - нельзя,
а точно измерить промежуток времени - МОЖНО


Igor1984   (2002-12-02 13:33:00) [22]

Да вы гоните. Минимальный шаг таймера ibm совместимых машин 55 мс. Меньшие интервалы получить невозможно. Разве что прогнать цикл много раз в течении к примеру секунды и подсчитывать сколько раз произошла итерация, а пот посчитать среднее.


MBo   (2002-12-02 13:14:00) [23]

QueryPerformanceCounter (API функция) или RDTSC (ассемблерная команда)


jack128   (2002-12-02 09:45:00) [24]

на сколько я знаю в win это не возможно


Чегермек   (2002-12-02 09:11:00) [25]

не мс, а мкс !!!


Ich Hasse   (2002-11-30 21:13:00) [26]

//------------------------------------------------------------------
// Файл: sk_timer.pas
// Описание: Функции для работы с мультимедиа таймером
//------------------------------------------------------------------
unit sk_timer;

interface
uses mmSystem, Windows, SysUtils, sk_const;

type
mmTimer = object
constructor Create(skDelay:Cardinal);
destructor Destroy;
procedure SetDelay(skDelay:Cardinal);

private
TimerID : Cardinal;
mmDelay : Cardinal;
end;

implementation

procedure Timer(uTimerID, uMessage: UINT;dwUser, dw1, dw2: DWORD) stdcall;
begin
//тут надо вставить код отсчета
end;

constructor mmTimer.Create(skDelay:Cardinal);
begin
TimerID:=timeSetEvent(skDelay,0,@Timer,0,TIME_PERIODIC);
if TimerID=0 then sle("Ошибка создания таймера");
mmDelay:=skDelay;
end;

destructor mmTimer.Destroy;
begin
if timeKillEvent(TimerID)=MMSYSERR_INVALPARAM then sle("Таймер не существует");
end;

procedure mmTimer.SetDelay(skDelay:Cardinal);
begin
if timeKillEvent(TimerID)=MMSYSERR_INVALPARAM then sle("Таймер не существует");
TimerID:=timeSetEvent(skDelay,0,@Timer,0,TIME_PERIODIC);
if TimerID=0 then sle("Ошибка создания таймера");
mmDelay:=skDelay;
end;



end.


sle - процедура устанавливающая последнюю ошибку, в принципе не нужна...


Ich Hasse   (2002-11-30 21:03:00) [27]

в смысле поставить такой таймер, который мерил бы с точностью до мс? Если да то это элементарно...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо