In article <907117187@f661.n5030.z2.ftn>, Lev Serebryakov
<Lev.Serebryakov@f661.n5030.z2.fidonet.org> wrote:
> Привет All !
>
> Есть ли портабельная (или не очнь - хотя бы FreeBSD/Linux/Solaris)
> алтернатива alert()'у? В alert()'е не устраивате точ, что один таймер на
процесс
> - ловишь SIG_ALERT и все.
> Дело в том, что пишется некоторая библиотека (скажкм, комуникационная),
> которой надо периодически делать keep-alive запрос к своему удаленному
> напарнику. А иногда не надо - за ранее сказать трудно, от транспорта и
настроек
> зависит, а они могут менятся от запуска к запуску программы, которая
библиотеку
> использует. Использовать alert() не есть правильно - вдруг программа
> (использующая библиотеку) уже поставила свой обработчик. Ограничивать
программу
> на использования alert()'а или просить дергать время от времени функцию
тоже не
> хочется. Как быть?
Все три перечисленный системы поддерживают pthreads. Далее очевидно: при
инициализации Вашей библиотеки просто отпочковываете один тред, который и
следит за временами, и посылает keep_alive запросы.
Тред в цикле ресетит флажок и засыпает на время, равное wakeuplimit/2. Hа
любую операцию библиотека флажок ставит. Тред, просыпаясь и увидев флажок
- матерится, скидывает его обратно и переворачивается на другой бок. Hе
увидив флажка - с радостью шлет wake-up пакет или что там полагается.
Как правило, в таких библиотечках не очень хочется, чтобы wake-up пакеты
мешали нормальной работе, и хочется не начинать передачу во время передачи
таких пакетов. Посему - делается еще и мутекс, который ставится при входе
в любую функцию библиотечки, и освобождается при выходе. А посылка wake-up
- тоже делается под мутексом. Hе забудьте и проверку флажка тоже внести
под мутекс. Hо это - если wake-upы таки мешают нормальной работе. Если нет
- то это не нужно.
Классный программист еще и заджойнит этот тред при закрывании библиотеки.
Умный программист этого делать никогда не будет (ну, на Солярисе может, и
будет - и то ... :-)
> [Team Они такие бледные!] С уважением, Lev.
> ... Mama often told me we all have to die (C) N. Cave
-- Vladimir Butenko Stalker Software, Inc. -- end of forwarded message --
-- С тем, что не помешает никогда, Kittle