Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Dmitry S. Rzhavin                    2:5020/400     07 Apr 2000  12:03:29
 To : All
 Subject : Re: Блокировка
 -------------------------------------------------------------------------------- 
 
 Maxim Sobolev wrote:
 
 > 
 > Sergey Budnitsky wrote:
 > 
 > >         Есть прога, которая ничего не делает, кроме как сидит и ждет прихода
 > >   разных сигналов и по пришествию их обрабатывает. Соот. в перерывах между
 > >   сигналами ее нужно как-то занять. Делать while(1) или sleep(100000000) не
 > >   хочется. Сейчас для этих целей, блокировка программы до прихода сигнала,
 > >   используется select(0,0,0,0,0).
 > >         Интересует, есть-ли специальные функции делающие такое (ждущие
 > > прихода  любого сигнала и отваливающиеся с EINTR)?
 > 
 > Hу может быть nanosleep()
 > 
 > > Если таковых не имеется, то
 > >   насколько правильно (безопасно, эффективно, ....) такое использование
 > >   select() в этих целях?
 > 
 > Абсолютно нормально и правильно. Более того, это практически единственная
 > подобная функция работающая практически одинаково на разных унихах. -Maxim
 
 У меня несколько похожая задача, даже две:
 1) надо сделать нечто такое:
 for(;;) {
   ...  // некий код
   if (zhopa) {
    // надо остановиться и ничего не делать,
    // пока не придет сигнал. После того, как
    // придет сигнал, он будет обработан, а мне
    // надо просто продолжить (!!!) с этого места
   }
   ...  // опять код
 }
 
 2) Есть некий процесс, сидит и ловит UDP. Пакеты могут поступать
 очень часто, а обработка пакета может занять тучу времени. Терять
 пакеты ооочень не хочется (повторять их никто не будет, а надежность
 линии и так не гарантирована). Скорее всего, надо разделить на 2
 процесса: один сидит, ловит пакеты и скармливает их второму. Второй
 уже их обрабатывает. Вопрос: как обеспечить достаточно большой буфер
 для обмена (чтобы 1й никогда не вис из-за невозможности в него
 записать),
 а при этом 2й наоборот автоматически стопился, если буфер пуст (а не
 висел в вечном цикле с проверкой буфера)?
 --- ifmail v.2.15dev4
  * Origin: Rostelecom (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Re: Блокировка   Dmitry S. Rzhavin   07 Apr 2000 12:03:29 
Архивное /ru.unix.bsd/1018094269ed.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional