(fwd) Re: Алтернатива alert() в UNIX?

Andrey Gerzhov (kittle@freeland.alex-ua.com)
Tue, 6 Oct 1998 01:51:17 +0300 (EEST)

-- forwarded message --
Path: freeland.alex-ua.com!barmaglot.alex-ua.com!f188.n463.z2!f116.n463.z2!f58.n463!f238.n5020!f400.n5020!ddt.demos.su!fido-news-server
Newsgroups: fido.ru.unix
Distribution: fido
X-Comment-To: All
From: butenko@stalker.com (Vladimir A. Butenko)
X-FTN-Sender: "Vladimir A. Butenko" <Vladimir.A.Butenko@f400.n5020.z2.fidonet.org>
Date: Mon, 05 Oct 98 01:36:15 +0300
Subject: Re: Алтернатива alert() в UNIX?
Message-ID: <butenko-0510980235530001@stalker.gamma.ru>
References: <907117187@f661.n5030.z2>
Organization: Stalker Software, Inc.
X-FTN-AREA: RU.UNIX
X-FTN-MSGID: stalker.gamma.ru d373e800
X-FTN-REPLY: 2:5030/661 36118283
X-FTN-Tearline: ifmail v.2.14dev2
X-FTN-Origin: Stalker Software, Inc. (2:5020/400@fidonet)
X-FTN-SEEN-BY: 50/381 520 615 993 461/121 463/5 18 58 68 72 89 93 116 126 130 156
X-FTN-SEEN-BY: 463/159 166 173 177 188 220 244 246 306 316 432 600 690 707 1006
X-FTN-SEEN-BY: 464/100 465/185 466/10 467/10 469/124 478/20 490/63 4613/204 4614/1
X-FTN-SEEN-BY: 4614/6 4615/7 21 4616/3 4623/17 4625/3 4631/13 4635/4 5001/15 211
X-FTN-SEEN-BY: 5002/16 5003/15 5006/1 5007/1 5011/13 201 5012/1 5015/28 5020/62 68
X-FTN-SEEN-BY: 5020/118 204 238 300 302 400 443 487 510 748 1057 1169 1200 1381
X-FTN-SEEN-BY: 5020/1851 4000 5022/5 5023/1 11 5024/11 5025/2 5027/16 5028/51
X-FTN-SEEN-BY: 5029/5 5030/115 5032/3 5034/1 5036/1 2 5049/1 6 256 5050/5050
X-FTN-SEEN-BY: 5051/15 5054/9 10 5055/44 5057/1 5058/24 5059/2 5060/88 5061/7 15
X-FTN-SEEN-BY: 5061/48 5064/5 5065/1 10 5066/2 5069/1 2 5074/9 5075/10 5077/3
X-FTN-SEEN-BY: 5078/15 5080/80 1003 5083/21 61 5084/10 5085/250 5094/5094 5100/21
X-FTN-PATH: 5020/400 238 463/58 116
X-FTN-PATH: 463/188
Lines: 51
Xref: freeland.alex-ua.com fido.ru.unix:1984

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