-
Data: 2012-02-21 23:23:15
Temat: Re: procedura tworzenia program w
Od: Andrzej Jarzabek <a...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On 21/02/2012 22:21, Wojciech Jaczewski wrote:
> Andrzej Jarzabek wrote:
>
>>> Nie mogę w takim przypadku używać pthread_cond_timedwait, bo zamiast
>>> poczekać planowane np. 5 sekund, raz poczeka mi 0 sekund a raz 5 minut.
>>
>> Ale pthread_cond_timedwait nie jest po to, żeby odmierzać czas!
>
> To po co w takim razie jest tam czas jako argument? I po co w ogóle istnieje
> ta funkcja, skoro jest pthread_cond_wait?
> Po prostu chciałem użyć pthread_cond_timedwait zgodnie z jej przeznaczeniem:
> poczekaj na zdarzenie lub upływ czasu. I w moich warunkach - nie mogę.
Ta funkcja, jak i wszystkie inne 'timed' nie jest po to, żeby jej używać
do normalnych czynności. Do tego, co próbujesz robić, powinieneś znowu
odpalić osobny wątek, który odczekuje odpowiednią ilość czasu i
sygnalizuje zmienną warunkową.
Funkcje 'timed' służą do zaimplementowania timeoutu, generalnie do
uniknięcia sytuacji, kiedy program by 'zwisał' albo zostawiał zbędne
wątki. Przykładowo jeśli wątkami realizujesz jakieś równolegle
działające komponenty w danym programie, to możesz chcieć mieć w tym
programie moduł monitorujący te komponenty, pozwalający użytkownikowi na
podglądnięcie, co program w danej chwili robi. I żeby taki moduł
wiedział, że dany wątek nadal żyje i czeka na cośtam, ten wątek może co
np. sekundę przerywać czekanie i wysyłać monitorowi komunikat 'nadal
żyję i czekam'. Inna możliwa sytuacja jest taka, że pewne wątki mogą
przestać być potrzebne - jako alternatywę dla pthread_cancel można
zaprojektować je tak, żeby periodycznie sprawdzały, czy powinny jeszcze
istnieć i jeśli nie, to się same zamykały.
>> Większa ilość wątków nie oznacza większej komplikacji - te wątki są
>> zresztą bardzo proste. A ponieważ - zwłaszcza jeśli się martwisz o
>> komplikację programu - masz to schowane za warstwą abstrakcji, to nie
>> robi to żadnej różnicy
>
> Do czasu, gdy nie pojawia się błąd - być może w zupełnie innej części,
> którego nie mogę wypatrzeć - wtedy nie mogę sobie na ślepo przyjąć
> założenia, że inne części, działające w innych wątkach są OK - w ramach
> szukania przyczyny błędu muszę zajrzeć także do nich. To, że zostało to
> schowane za warstwą abstrakcji wiele nie zmienia.
Właśnie wiele zmienia, bo pozwala na wnioskowanie o poszczególnych
częściach programu w izolacji. Oczywiście jeśli twój program ma UB, to
teoretycznie wszystko jest możliwe, ale w tym przypadku też można
dedukować przyczyny po objawach. Poza tym im prostszy dany element, tym
mniejsze prawdopodobieństwo, że ma UB. Np. funkcja typu void, która
blokuje aż będzie coś na wejściu czy innym sockecie, jest bardzo prosta.
Funkcja, która wywołuje zadaną funkcję typu void i ustawia zmienną
warunkową jest również bardzo prosta (a tę jedną funkcję możesz
wykorzystać do obsługi wszystkich interesujących cię zdarzeń,
wymieniając tylko która funkcja ma być wywołana.
Oczywiście do tego wszystkiego dobrze mieć jeszcze język wspierający
abstrakcję, a jeszcze lepiej do tego sensowne biblioteki, a nie grzebać
się w gołych pthreadsach. W ogóle jedyny racjonalny powód, jaki widzę,
żeby cokolwiek robić w pthreadsach, to napisanie Nowej Jeszcze
Zajebistszej Od Wszystkich Istniejących Biblioteki Do Wątków
(zajebistszej pod jakimkolwiek interesującym nas względem naturalnie).
Najnowsze wątki z tej grupy
- "Wuj dobra rada" z KDAB rozważa: Choosing the Right Programming Language for Your Embedded Linux Device
- Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
Najnowsze wątki
- 2025-03-31 Kraków => IT Expert (Network Systems area) <=
- 2025-03-31 Białystok => NMS System Administrator <=
- 2025-03-31 Częstochowa => Product Manager - Systemy infrastruktury teleinformaty
- 2025-03-31 Sąd/Sędzia odrzuca wniosek o 30d aresztu Ziobry i jedzie po PO-Komisji Sroki [i Ziobrze w GW wersji]
- 2025-03-31 Warszawa => Sales Executive / KAM <=
- 2025-03-31 Warszawa => International Freight Forwarder <=
- 2025-03-31 Re: Państewko prawka Rumunia czyli pokaz UE leworządności - lider unieważnionych wyborów niedopuszczony do powtórki
- 2025-03-31 Dęblin => JavaScript / Node / Fullstack Developer <=
- 2025-03-31 Re: Kompensacja mocy biernej przy 230VAC
- 2025-03-31 Re: Kompensacja mocy biernej przy 230VAC
- 2025-03-31 Wrocław => Senior Backend Developer <=
- 2025-03-31 Białystok => Generative AI Engineer <=
- 2025-03-31 China-Kraków => Key Account Manager IT <=
- 2025-03-31 Prawne ciekawostki: Ksiądz KRK wygrał ze swoim biskupem sprawę o "naruszenie dóbr osobistych" [SN oddalił kasacje]
- 2025-03-31 Podatek od "konta wspólnego"