Обратный вызов таймера C - PullRequest
6 голосов
/ 15 мая 2009

Интересует что-то похожее на JavaScript setTimeout в C как в UNIX, так и в Windows.

В основном, я хочу:

start_timer(&function_pointer, int time_in_secs)

или как можно ближе к этому.

Также было бы неплохо что-то похожее на setInterval (где он вызывает обратный вызов каждые n секунд), но это может быть реализовано с помощью setTimeout:)

Ответы [ 5 ]

8 голосов
/ 15 мая 2009

SetTimer в Win32 с TimerProc в качестве обратного вызова.

/* calls TimerProc once every 60000 milliseconds */
SetTimer(NULL, 1, 60000, TimerProc);
5 голосов
/ 15 мая 2009

Возможно, вы захотите попробовать интервальные таймеры POSIX, timer_create и timer_settime, поскольку это позволяет вам указать функцию обратного вызова напрямую, без использования сигналов. Чтобы таймер истекал только один раз (и не повторялся):

timer_settime : значение перезагрузки таймер должен быть установлен на значение указанный членом it_interval значение. Когда таймер вооружен ненулевой it_interval, периодический (или повторяется) таймер указан.

Вот обширная документация по использованию этих таймеров с хорошим примером из Руководства программиста Linux на kernel.org:

.

timer_create - создать POSIX-таймер для каждого процесса

2 голосов
/ 15 мая 2009

Для UNIX man setitimer.

1 голос
/ 15 мая 2009

Некоторую информацию о alarm () и setitimer () можно найти здесь . Обратите внимание, что функция upcall является обработчиком сигналов, поэтому на нее распространяются все ограничения и ограничения, связанные с обработчиками сигналов, как подробно описано здесь .

Как отмечено в первой ссылке, alarm () основана на POSIX, setitimer () - нет (хотя она более гибкая).

0 голосов
/ 15 мая 2009

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

http://library.gnome.org/devel/glib/2.20/glib-The-Main-Event-Loop.html#g-timeout-add

...