Таймер/секундомер

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

D_I_M_A
новенький
Сообщения: 27
Зарегистрирован: 21.08.2007 12:42:20

Таймер/секундомер

Сообщение D_I_M_A »

Как юзать сабж в FPC?
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

его там нету насколько помню, только отдельные компоненты, где-то или тут на форуме или фрипаскаль.орг были
v-t-l
энтузиаст
Сообщения: 745
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение v-t-l »

если имеется в виду компонент TTimer, то он давно в Lazarus на вкладке System
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

Да, это вопрос, что имел ввиду D_I_M_A
D_I_M_A
новенький
Сообщения: 27
Зарегистрирован: 21.08.2007 12:42:20

Сообщение D_I_M_A »

Да, это вопрос, что имел ввиду D_I_M_A

Вопрос: "Как запустить таймер и узнать значения его в момент времени. Ну или тоже про секундомер. Короче, интерфейс функций работы с таймером/секундомером"...
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

вопрос в разделе Free Pascal Compiler там нет таймера.

"Как запустить таймер и узнать значения его в момент времени. Ну или тоже про секундомер. Короче, интерфейс функций работы с таймером/секундомером"

это вообще никак.
ты можешь узнать сколько времени

запомнить его в переменую, а потом сверятся с ней и получать разницу.
задережку делать через

Код: Выделить всё

sleep(1000)

если делать паролельно, то изучай потоки.
D_I_M_A
новенький
Сообщения: 27
Зарегистрирован: 21.08.2007 12:42:20

Сообщение D_I_M_A »

вопрос в разделе Free Pascal Compiler там нет таймера.

Цитата:

"Как запустить таймер и узнать значения его в момент времени. Ну или тоже про секундомер. Короче, интерфейс функций работы с таймером/секундомером"

это вообще никак.
ты можешь узнать сколько времени
Код:
now

запомнить его в переменую, а потом сверятся с ней и получать разницу.
задережку делать через
Код:
sleep(1000)


Я так уже делал, даже свой модуль сделал... Блин, неужеле у компьютера нет встроенного таймера????
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

есть еще GetTickCount. но только под M$ Windows. Если не ошибаюсь, то эта функция возвращает количество тиков, котрое прошло с момента загрузки компьютера.
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

MMRESULT timeSetEvent(

UINT uDelay,
UINT uResolution,
LPTIMECALLBACK lpTimeProc,
DWORD dwUser,
UINT fuEvent
);
из модуля MMSYSTEM. Правда эта функция тож создаёт отдельный поток и в нём вызывает функцию lpTimeProc. Доступна только в Windows (ну и ещё в Wine)
Аватара пользователя
Максим
энтузиаст
Сообщения: 599
Зарегистрирован: 27.07.2007 01:51:43
Откуда: Москва

Сообщение Максим »

В FPC 2.2.0 имеется класс TFPThreadedTimerDriver в модуле fptimer.pp. Судя по всему, это как раз то, что нужно.
Аватара пользователя
Alexander
энтузиаст
Сообщения: 888
Зарегистрирован: 18.12.2005 18:10:00
Откуда: оттуда
Контактная информация:

Сообщение Alexander »

D_I_M_A писал(а):Я так уже делал, даже свой модуль сделал... Блин,
неужеле у компьютера нет встроенного таймера????


В компьютере то он есть, но многозадачная ось не даст тебе
им пользоваться напрямую. Программ то ведь много, не только твоя.

Так что функции работы с промежутками времени предоставляет сама
ось. Это уже не ДОС. Кстати, какая у тебя ОС ? И что за задачу
решаешь ?

Функций для этого много и они разные. В одном случае одни, в другом
другие. Некоторые (now) сделаны в FP кроссплатформенными,
некоторые специфичны для ОС. Например, в Вин есть апи функция
GetTickCount, а в Линуксе это совсем другая функция, действие её то
же.

Ещё есть GetLocalTime, GetSystemTime, Sleep,...

Есть таймеры, реализованные через сообщения. ИТД.
spv
новенький
Сообщения: 71
Зарегистрирован: 26.09.2006 13:57:46
Откуда: Подмосковье

Сообщение spv »

Немножко добавлю от себя. GetTickCount (как и TTimer в Дельфи, как и sleep, GetSystemTime)- штука довольно грубая. Он отсчитывает промежутки времени с тиком в 1/18.2 секунды, кажется (т.е., грубо говоря, где-то по 50 мс). Для большинства прикладных задач этого хватает за глаза, а вот если нужно точнее- надо брать справочник по ассемблеру и копать в сторону MMX. Там, кажется, свой таймер, более точный.

Вобщем, если Вы вдруг АСУ пишете- такой таймер не поможет. :)
e-moe
новенький
Сообщения: 31
Зарегистрирован: 27.09.2007 17:00:39

Сообщение e-moe »

а ММХ то тут при чем?
в ДОСе перепрограммировали один из каналов системного таймера на нужную точность, в современных же ОС часто выходят из частоты проца и счетчика тактов CPU (см. RDTSC)
spv
новенький
Сообщения: 71
Зарегистрирован: 26.09.2006 13:57:46
Откуда: Подмосковье

Сообщение spv »

Хм... Ну, если в ДОСе работать только с одной программой- конечно, можно перепрограммировать таймер. А если таких программ несколько?

А частота разве не может меняться? Как-то не интересовался этим вопросом. Но во многих утилитах видел, что она "плавает"...

Я в свое время так и не нашел выхода из этой ситуации- просто использовал таймер и микропроцессор на АЦП, если до него можно было достучаться :)

А в ММХ есть мультимедиа-таймер, который поточнее :)
Аватара пользователя
bw
постоялец
Сообщения: 359
Зарегистрирован: 01.12.2005 10:36:23
Откуда: Усть-Илимск
Контактная информация:

Сообщение bw »

e-moe, rdtsc, говоришь. А что, если процессор работает не с постоянной частотой? Тогда не получится ориентироваться на rdtsc при расчете времени. В винде есть функции для точной работы со временем (QueryPerformanceFrequency и QueryPerformanceCounter), но я никогда не пользовался. Кажется ничего лучше в этой операционке нет, разве что на уровне ядря есть какие фичи.

..bw
Ответить