Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.os.linux.programowanie > #2247
| From | heby <heby@poczta.onet.pl> |
|---|---|
| Newsgroups | pl.comp.os.linux.programowanie |
| Subject | ::open i timeout |
| Date | 2020-10-21 17:23 +0200 |
| Organization | A noiseless patient Spider |
| Message-ID | <rmpjpt$pld$1@dont-email.me> (permalink) |
Cześć. Jest pipe. Jest na nim ::open. Blokujący. Blokujący, bo w/g manuali nie wolno nic przesyłać przez rurę do momentu aż oba końce nie będa w stanie "open" a to gwarantuje (tylko?) wyjscie z open blokującego. Chcę, aby można go było "przerwać". Tzn widze to na dwa sposoby: 1) inny wątek wysyła flagę "dość, to nie ma sensu" 2) ::open (lub substytut) wychodzi sobie po paru ms i pyta co dalej. Ponieważ rownolegle takich "openów" jest kilka, w dodatku w tle ciągle się wołają, nie mogę wysłać jakiegoś ogólnego sygnału, bo nie wiem gdzie trafi. Muszę przerwać jeden, konkretny open. Jak to się prawidłowo rozwiązuje? Chwilowo mam taką emulację: odpalam ::open w innym watku, a w głównym po jakimś czasie wołam pthread_cancel. Tylko że to jest kiepskie. Dla ::read mam ::poll i to działa bardzo fajnie. No własnie. Czy powinienem uzyć ::open nieblokującego a zaraz za nim w pętli ::poll/::ppoll z POLLOUT? Toeretycznie taki poll czeka aż rura stanie się "writable". Czy to prawidłowe rozwiązanie (nie testowałem jeszcze)?
Back to pl.comp.os.linux.programowanie | Previous | Next | Find similar
::open i timeout heby <heby@poczta.onet.pl> - 2020-10-21 17:23 +0200
csiph-web