таймер

Модератор: Модераторы разделов

drifterlom
Сообщения: 34

таймер

Сообщение drifterlom »

Как на C написать таймер, работающий в отдельном потоке и точно подсчитывающий время (до долей мс)
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: таймер

Сообщение eddy »

man 3 usleep
man 2 select
man 2 nanosleep
Выбирайте :)
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
Аватара пользователя
grouzen
Сообщения: 120
ОС: LFS, slackware

Re: таймер

Сообщение grouzen »

eddy писал(а):
14.09.2009 09:11
man 3 usleep
man 2 select
man 2 nanosleep
Выбирайте :)

ну и man pthreads
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: таймер

Сообщение eddy »

grouzen писал(а):
14.09.2009 12:25
ну и man pthreads

Да, потокам же еще и общаться надо, тогда еще и канал какой-нибудь надо организовать (именованный или неименованный), или через shm обмениваться сообщениями...
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: таймер

Сообщение KDimanB »

Слушайте, вот у меня тоже вопрос.
Кто-нибудь может привести пример простой программы, которая просто по таймеру будет заполнять весь экран рандомными знаками, допустим каждые 25 мск.?
Это возможно на С реализовать или надо C++ использовать?

Если можно - приведите код этой программы (надеюсь он получится совсем небольшой). Просто я совсем новичок в С.

Хотя вообще в идеале я хотел бы написать программу, которая бы выводила не рандомно, а в зависимости от нажатых кнопок в реальном времени.
Т.е. таймер выводит каждые 25мск то, что у него в памяти. И если мы нажали на клавиатуре символ "a" - он начинает заполнять весь экран буквой "а". Нажали к примеру "z" - и в следующий раз весь экран заполнится "z".
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: таймер

Сообщение eddy »

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

double dtime(){
    struct timeval ct;
    struct timezone tz;
    gettimeofday(&ct, &tz);
    return (ct.tv_sec + ct.tv_usec/1e6);
}
...
double t0 = dtime();
...
double timediff = dtime() - t0;
...

timediff покажет, сколько времени прошло с момента вызова t0=dtime().

Вариант паузы:

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

struct timeval ct;
ct.tv_sec = seconds;
ct.tv_usec = microseconds;
select(0, NULL, NULL, NULL, ct);

Дальше додумайте сами под свои нужды ;)
(домашние задания целиком здесь никто за вас решать не будет)
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали:
KDimanB
Сообщения: 143
ОС: Debian (squeeze), Slax LiveCD

Re: таймер

Сообщение KDimanB »

eddy писал(а):
14.09.2009 14:32
пост

Спасибо.
Спасибо сказали:
drifterlom
Сообщения: 34

Re: таймер

Сообщение drifterlom »

Можно уточнить
Дело в том что стоит задача управлять в реальном времени, поэтому таймер должен работать независимо от выполняемого кода
Таймер уже написан в среде QNX, хотел перевести все на Linux
Там он работает примерно следующим образом: создан отдельный поток, который ждет прерывания от процессора, т.е. где-то в отдельном регистре считаются импульсы процессора с его тактовой частотой и при накоплении определенного кол-ва импульсов срабатывает прерывание, все останавливается, запускается обработчик в вышеупомянутом отдельном потоке в котором минимум команд, грубо говоря нарастить время на дельту и переслать время в основную программу.
впринципе код у меня уже есть, но наверняка под Linux возникнут какие-нить проблемы реализации (без проблем не бывает). Вот я и советуюсь
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: таймер

Сообщение Portnov »

man alarm
?
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
drifterlom
Сообщения: 34

Re: таймер

Сообщение drifterlom »

напишите ктонить код с использованием функции timer_create
Спасибо сказали: