eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingprocedura tworzenia programów › Re: procedura tworzenia program w
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: Andrzej Jarzabek <a...@g...com>
    Newsgroups: pl.comp.programming
    Subject: Re: procedura tworzenia program w
    Date: Tue, 21 Feb 2012 23:23:15 +0000
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 59
    Message-ID: <ji1911$k1e$1@inews.gazeta.pl>
    References: <jhliut$3he$1@mx1.internetia.pl>
    <pj0lc5k2ww4z$.j8cj3ca4fdmw$.dlg@40tude.net>
    <jhodnv$9en$2@inews.gazeta.pl>
    <1rvfbwvj4h0dr$.5mc1fgvvz1ws.dlg@40tude.net>
    <jhoql7$kq0$1@inews.gazeta.pl> <jhr1lj$ub3$1@node2.news.atman.pl>
    <c...@4...com>
    <4f414c67$0$2374$c3e8da3$47a2c32d@news.astraweb.com>
    <c...@4...com>
    <jht6ai$1ip$1@inews.gazeta.pl> <jhthug$tib$1@mx1.internetia.pl>
    <jhtk1u$f91$1@inews.gazeta.pl>
    <7...@m...googlegroups.com>
    <jhuege$cep$1@inews.gazeta.pl> <ji13jt$4bp$1@inews.gazeta.pl>
    <ji15eb$a8k$1@inews.gazeta.pl>
    NNTP-Posting-Host: 5ac5171b.bb.sky.com
    Mime-Version: 1.0
    Content-Type: text/plain; charset=UTF-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1329866593 20526 90.197.23.27 (21 Feb 2012 23:23:13 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Tue, 21 Feb 2012 23:23:13 +0000 (UTC)
    X-User: septi
    In-Reply-To: <ji15eb$a8k$1@inews.gazeta.pl>
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20120216
    Thunderbird/10.0.2
    Xref: news-archive.icm.edu.pl pl.comp.programming:195604
    [ ukryj 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).

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: