Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.os.linux.programowanie > #2247

::open i timeout

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)

Show all headers | View raw


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


Thread

::open i timeout heby <heby@poczta.onet.pl> - 2020-10-21 17:23 +0200

csiph-web