таймер
Модератор: Модераторы разделов
-
drifterlom
- Сообщения: 34
таймер
Как на C написать таймер, работающий в отдельном потоке и точно подсчитывающий время (до долей мс)
-
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: таймер
man 3 usleep
man 2 select
man 2 nanosleep
Выбирайте
man 2 select
man 2 nanosleep
Выбирайте
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
-
grouzen
- Сообщения: 120
- ОС: LFS, slackware
-
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: таймер
Да, потокам же еще и общаться надо, тогда еще и канал какой-нибудь надо организовать (именованный или неименованный), или через shm обмениваться сообщениями...
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
-
KDimanB
- Сообщения: 143
- ОС: Debian (squeeze), Slax LiveCD
Re: таймер
Слушайте, вот у меня тоже вопрос.
Кто-нибудь может привести пример простой программы, которая просто по таймеру будет заполнять весь экран рандомными знаками, допустим каждые 25 мск.?
Это возможно на С реализовать или надо C++ использовать?
Если можно - приведите код этой программы (надеюсь он получится совсем небольшой). Просто я совсем новичок в С.
Хотя вообще в идеале я хотел бы написать программу, которая бы выводила не рандомно, а в зависимости от нажатых кнопок в реальном времени.
Т.е. таймер выводит каждые 25мск то, что у него в памяти. И если мы нажали на клавиатуре символ "a" - он начинает заполнять весь экран буквой "а". Нажали к примеру "z" - и в следующий раз весь экран заполнится "z".
Кто-нибудь может привести пример простой программы, которая просто по таймеру будет заполнять весь экран рандомными знаками, допустим каждые 25 мск.?
Это возможно на С реализовать или надо C++ использовать?
Если можно - приведите код этой программы (надеюсь он получится совсем небольшой). Просто я совсем новичок в С.
Хотя вообще в идеале я хотел бы написать программу, которая бы выводила не рандомно, а в зависимости от нажатых кнопок в реальном времени.
Т.е. таймер выводит каждые 25мск то, что у него в памяти. И если мы нажали на клавиатуре символ "a" - он начинает заполнять весь экран буквой "а". Нажали к примеру "z" - и в следующий раз весь экран заполнится "z".
-
eddy
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: таймер
Код: Выделить всё
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 - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка
-
KDimanB
- Сообщения: 143
- ОС: Debian (squeeze), Slax LiveCD
-
drifterlom
- Сообщения: 34
Re: таймер
Можно уточнить
Дело в том что стоит задача управлять в реальном времени, поэтому таймер должен работать независимо от выполняемого кода
Таймер уже написан в среде QNX, хотел перевести все на Linux
Там он работает примерно следующим образом: создан отдельный поток, который ждет прерывания от процессора, т.е. где-то в отдельном регистре считаются импульсы процессора с его тактовой частотой и при накоплении определенного кол-ва импульсов срабатывает прерывание, все останавливается, запускается обработчик в вышеупомянутом отдельном потоке в котором минимум команд, грубо говоря нарастить время на дельту и переслать время в основную программу.
впринципе код у меня уже есть, но наверняка под Linux возникнут какие-нить проблемы реализации (без проблем не бывает). Вот я и советуюсь
Дело в том что стоит задача управлять в реальном времени, поэтому таймер должен работать независимо от выполняемого кода
Таймер уже написан в среде QNX, хотел перевести все на Linux
Там он работает примерно следующим образом: создан отдельный поток, который ждет прерывания от процессора, т.е. где-то в отдельном регистре считаются импульсы процессора с его тактовой частотой и при накоплении определенного кол-ва импульсов срабатывает прерывание, все останавливается, запускается обработчик в вышеупомянутом отдельном потоке в котором минимум команд, грубо говоря нарастить время на дельту и переслать время в основную программу.
впринципе код у меня уже есть, но наверняка под Linux возникнут какие-нить проблемы реализации (без проблем не бывает). Вот я и советуюсь
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: таймер
man alarm
?
?
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
drifterlom
- Сообщения: 34
Re: таймер
напишите ктонить код с использованием функции timer_create