LINUX.ORG.RU

Таймеры на си


0

1

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

Да, C++ не канает, только чистый си.

★★★★★

Последнее исправление: Dark_SavanT (всего исправлений: 1)

А если ты юзаешь какой-нибудь стандартный ивентлуп, например GMainLoop, можно юзать глибовые таймеры

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

eventloop не используется, он тут толком-то и не нужен.

А с sigalrm придётся извратиться, чтобы сделать несколько таймеров, причём я не знаю сколько именно понадобится, разве что сколько в максимуме.

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

А что там извращаться? Получили сигнал, прошлись по списку, посмотрели - у кого уже вышел таймаут - выполнили коллбек. Не вижу сложностей

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

> Городить свой велосипед очень неохота.

А нет здесь велосипеда, все тривиально пишется минут за 10.

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

> все тривиально пишется минут за 10.

В большинстве случаев с этого начинались самые весёлые грабли

Dark_SavanT ★★★★★
() автор топика

pthread и функция в которую передаётся указатель на callback и время?

invy ★★★★★
()

Таймеры на тредах, как вариант.

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

Если бы софтина писалась с нуля - взял бы, а так перепиливать придётся.

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

если очень хочется, можно и на ноль поделить.

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

>Если понадеяться на авось?

Нет, использовать особенности конкретной реализации.

AptGet ★★★
()

man timer_create

а все отписавшиеся насчёт таймеров на тредах - просто упорки.

anonymous
()
Ответ на: комментарий от Dark_SavanT

> eventloop не используется, он тут толком-то и не нужен.

Не хочешь юзать либы - навелосипедь epoll+timerfd. Но это тоже будет евентлуп, хоть и жутко тривиальный.

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

Да, использование select/pselect/poll/ppoll/epoll мне кажется лучше, чем сигналы. Т.к. более портабельно. В случае с select даже на Win32. Только вопрос еще, какой величины таймер. Главное, чтобы был 100 мс и больше, т.к. при меньших временах есть вероятность запаздывание на обычных ядрах. Я с помощью pselect и gettimeofday делал на 100 мкс, но это было с приоритетом реально времени и все равно были непредсказуемые задержки))

olegk ★★
()

В общем посмотрел я на всё это безобразие и решил перепилить софтину под libevent. Благо по внимательном рассмотрении, не так много пилить надо.

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

libevent я уже использовал, потому и его.

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

Почему? Это идеальное соответствие запросу ТС:

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

только чистый си.

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

После того, как нам в универе объяснили, как нужно правильно использовать сигналы, чтобы не было всяких гонок и т.п. (через sigaction) я бы советовал их использовать только при явной необходимости.

Топикстартеру, как уже упомянули, нужен timer_create.

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

Было бы нужно под windows пошёл бы на «винфак», а так по умолчанию - posix.

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