🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.os.linux.programowanie
1 messages
1 total messages Started by heby Wed, 21 Oct 2020 15:23
::open i timeout
#72990
Author: heby
Date: Wed, 21 Oct 2020 15:23
30 lines
2150 bytes
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)?
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads