LINUX.ORG.RU

Таймеры в Си

 


1

1

Понадобился таймер на Си. Нашёл реализацию, но мне нужна масштабируемость, если я захочу запилить 3, 4, 10 и.т.д. таймеров.

#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <sys/time.h>

void timer_handler(int signum)
{
    puts("handler");
}

int main()
{
    struct sigaction sa;
    struct itimerval timer;

    memset (&sa, 0x00, sizeof(sa));
    sa.sa_handler = &timer_handler;
    sigaction (SIGVTALRM, &sa, NULL);

    /* Set interval 1 sec */
    timer.it_value.tv_sec = 1;
    timer.it_value.tv_usec = 0;
    timer.it_interval.tv_sec = 1;
    timer.it_interval.tv_usec = 0;

    setitimer(ITIMER_VIRTUAL, &timer, NULL);

    for (;;) {
    }
}
Ответ на: комментарий от LittleBuster

Вообще, я намекал скорее на SIGEV_THREAD, который создаст новый тред с твоей функцией и переданным аргументом.

hateyoufeel ★★★★★
()
Ответ на: комментарий от slovazap

а проблема в том, что у тебя проходит время на установку таймера и следовательно тебе, что бы не наращивать бесконечно отставание, надо мерять время на старте и каждый раз перевымерять, на сколько тебе ставить таймер.

неудобно. А libevent и прочие даст это гораздо более удобно.

max_lapshin ★★★★★
()

Если нужен не очень точный таймер как в делфи и т.п., то лучше сделать отдельный поток, в котором делать gettimeofday и проверять, не настало ли нужное время и дергать соответствующий обработчик.

Rupricht ★★
()

Недавно открыл для себя timerfd_create, отличная штука! :)

joy4eg ★★★★★
()
Ответ на: комментарий от max_lapshin

а проблема в том, что у тебя проходит время на установку таймера и следовательно тебе, что бы не наращивать бесконечно отставание, надо мерять время на старте и каждый раз перевымерять, на сколько тебе ставить таймер.

Естественно надо. Это один вызов и одно вычитание.

неудобно. А libevent и прочие даст это гораздо более удобно.

Только для таймеров libevent это кошмарное bloatware, и подключать его дольше чем 2 строчки написать.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

ну да, ты прав

Если только для таймеров, проще написать самому.

max_lapshin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.