|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Dmitry Pryanishnikov 2:464/36 04 Feb 2004 16:02:10 To : All Subject : =?koi8-r?B?UmU6INPJzsjSz87J2sHDydEu?= -------------------------------------------------------------------------------- Привет! On Wed, 4 Feb 2004, Slawa Olhovchenkov wrote: > DP> очередью все, что нужно, и затем деблокировать доставку сигнала вторым > DP> вызовом sigprocmask. > > При большой частоте следования сигналов и модификации очереди не хочется так > делать. Так ведь потерять сигнал можно, разве нет? Hет, конечно. Блокируется доставка сигнала, но факт его прихода запоминается. Попробуй запустить такую программку: #include <stdio.h> #include <signal.h> void handler(int sig) { fprintf(stderr,"Signal %d came\n",sig); } main() { sigset_t sig; signal(SIGINT,handler); sigemptyset(&sig); sigaddset(&sig,SIGINT); sigprocmask(SIG_BLOCK,&sig,NULL); fprintf(stderr,"Push CTRL+C now!\n"); sleep(10); sigprocmask(SIG_UNBLOCK,&sig,NULL); return 0; } У меня результат одинаковый что на 4.4-REL, что на 4.9-REL: dmitry@lynx$ ./a.out Push CTRL+C now! ^CSignal 2 came Hасчет большой частоты - это да, накладные расходы на пару сисколлов будут, но я другого _корректного_ решения таки не вижу. Sincerely, Dmitry -- Atlantis ISP, System Administrator e-mail: dmitry@atlantis.dp.ua nic-hdl: LYNX-RIPE --- ifmail v.2.14.os-p7 * Origin: Atlantis ISP (2:464/36@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/245217e4a1b6e.html, оценка из 5, голосов 10
|