Strona 1 z 1

Producent/Konsument - ciężkie początki :)

: 29 sie 2010 01:13
autor: Agrest
Witam, zmienił się trochę temat moich pytań, więc zakładam nowy wątek:
Pitol pisze:(a w tym przypadku przydałaby się jakaś architektura typu Producer-Consument...)
Pewnie masz rację, bo już przestaję panować nad kodem. Czas na pierwszą w życiu architekturę Producent-Konsument. Poczytałem "Chruściela", ale nic mi nie rozjaśnił. Lubię tą książkę, ale rozdział Producent-Konsument jest napisany tak, jak kiedyś pisał książki J. Doliński. Jak człowiek nie znał tematu przed kupieniem książki, to się w trakcie czytania nie dowiedział, bo nie rozumiał tego języka. Ale do rzeczy:

Na wejściu do Obtain Queue może być dowolny typ danych, ale tylko jeden? Na moim panelu użytkownika jest tablica 2x7 i kilka przycisków typu boolean. Jak do Obtain Queue podłączę pustą tablicę 2x7, to już nie będę mógł podłączyć boolean do Enqueue Element. I odwrotnie - jak na początku dam boolean, to później nie podłączę array. Jak to ugryźć na początek?

PozdrA


P.S.
A może przy pomocy kolejki obsługiwać tylko przyciski boolean, a tablicę obsłużyć tradycyjnie w strukturze Event? Wtedy wykres z tej tablicy bym narysował w całości w pętli producenta. Dobry pomysł przed pójściem spać?

P.S. 2
A może być więcej pętli konsumenta, kręcących się z różnymi prędkościami? Jak wtedy zdejmować zadania z kolejki?

Re: Producent/Konsument - ciężkie początki :)

: 29 sie 2010 02:11
autor: jogurt_owocowy
Jak do Obtain Queue podłączę pustą tablicę 2x7, to już nie będę mógł podłączyć boolean do Enqueue Element. I odwrotnie - jak na początku dam boolean, to później nie podłączę array. Jak to ugryźć na początek?
Możesz tablicę i przyciski wziąć po prostu w klaster albo możesz zrobić kolejkę przenoszącą varianty.
Variant to specjalny typ danych, który może, niejako, zawierać w sobie dowolny inny typ. Za pomocą funkcji To Variant zamieniasz dowolny typ danych na variant, wysyłasz kolejką, a w miejscu odbioru konwertujesz variant z powrotem do pierwotnej postaci za pomocą funkcji Variant To Data.
A może przy pomocy kolejki obsługiwać tylko przyciski boolean, a tablicę obsłużyć tradycyjnie w strukturze Event? Wtedy wykres z tej tablicy bym narysował w całości w pętli producenta. Dobry pomysł przed pójściem spać?
Niedobry. Albo po bożemu wysyłasz dane do konsumenta, albo uznajesz, że przetwarzanie jest na tyle szybkie, że w ogóle konsumenta nie potrzebujesz i robisz wszystko w wątku z eventem.
A może być więcej pętli konsumenta, kręcących się z różnymi prędkościami? Jak wtedy zdejmować zadania z kolejki?
Może być. Do każdego konsumenta podłączasz referencję kolejki, a w środku wyjmujesz z niej elementy dokładnie tak samo, jak w przypadku pojedynczego konsumenta. Dalej wszystko już zależy od tego, co dokładnie te wątki miałyby robić.

Re: Producent/Konsument - ciężkie początki :)

: 29 sie 2010 23:01
autor: Agrest
Na razie rozumiem i dziękuję jogurt_owocowy. Teraz zróbmy krok dalej. W tym wątku Śmiga (pozdrawiam Słupsk) załączył mi wykres zmieniany myszka.vi a w nim struktura event obsługuje zdarzenia "Pane": Mouse Down i "Pane": Mouse Up. Jak te zdarzenia wsadzić do kolejki i rozlokować w pętlach?

PozdrA

Re: Producent/Konsument - ciężkie początki :)

: 31 sie 2010 18:26
autor: smiga
:) Dziękuję za pozdrowienia.

Nie wiem czy o to Ci chodziło, ale zerknij na załączony plik ... tablica wejściowa i wykres przestały być aktualizowane przez zmienne lokalne - teraz zostały wrzucone do kolejki

łączę pozdrawiania dla Szczecina ... i oczywiście Krakowa, bo też zagościł w wątku ;)

Re: Producent/Konsument - ciężkie początki :)

: 03 wrz 2010 04:11
autor: Agrest
Dziękuje Śmiga :)
Nie chcę wyjść na niewdzięcznika, ale w twoim przykładzie całe liczenie "Pane": Mouse up dzieje się w Evencie, zamiast w Konsumencie. Czyli jak napisał jogurt_owocowy "nie po bożemu". Ja mam w swoim "Pane": Mouse up trochę więcej liczenia, bo sprawdzam warunek żeby mi się wykres "nie cofał" jak go myszka "cofnie", poza tym przeliczam współrzędne na osi X, bo Array pracuje na czasie relatywnym (tak wygodniej wpisywać operatorowi), a XY Graph na absolutnym (czas każdej współrzędnej musi być podany od początku wykresu). I to wszystko w strukturze Event, która ma tylko przechwytywać zdarzenia i przesyłać je do Konsumenta.
Przychodzi mi do głowy tylko wstawić drugą strukturę Event do Konsumenta i właśnie tam obsłużyć zdarzenie "Pane": Mouse up.
Nie rozumiem jeszcze kilku rzeczy, np. po co pociągnąłeś cluster sprzed Obtain Queue do Bundle w środku Eventa. Ale generalnie wiem jak ma to działać i w którą stronę mam sterować, a właśnie po to jest to Forum :) A teraz do dzieła, do świtu jeszcze trochę czasu.
PozdrA

Re: Producent/Konsument - ciężkie początki :)

: 03 wrz 2010 14:32
autor: jogurt_owocowy
Nie chcę wyjść na niewdzięcznika, ale w twoim przykładzie całe liczenie "Pane": Mouse up dzieje się w Evencie, zamiast w Konsumencie. Czyli jak napisał jogurt_owocowy "nie po bożemu".
Trochę się zrozumieliśmy. W pierwszym poście napisałeś tak:
Jak do Obtain Queue podłączę pustą tablicę 2x7, to już nie będę mógł podłączyć boolean do Enqueue Element. I odwrotnie - jak na początku dam boolean, to później nie podłączę array.
(...)
A może przy pomocy kolejki obsługiwać tylko przyciski boolean, a tablicę obsłużyć tradycyjnie w strukturze Event?
Nie dołączyłeś VIaja, więc opierając się tylko na kontekście wypowiedzi zrozumiałem to tak, że chcesz rozbijać przetwarzanie tylko z tego powodu, że nie umiesz przesłać kolejką jednocześnie tablicy i wartości boolean.
Przykład od smiga jest dobry (z wyjątkiem tego, że zamiast eventów "Pane": Mouse Down/Up lepiej użyć "XY Graph": Mouse Down/Up). Producent ma przesłać do konsumenta pewną logiczną paczkę danych i tutaj tak właśnie jest. Natomiast jest oczywiste, że paczka musi być najpierw wyprodukowana, a od tego jest producent właśnie.

Re: Producent/Konsument - ciężkie początki :)

: 05 wrz 2010 14:33
autor: Agrest
W takim razie jeszcze nie czuję o co naprawdę chodzi w tej architekturze. Mam z 10 pytań, ale najpierw przejrzę więcej przykładów, to mi się niektóre sprawy same rozjaśnią. Póki co, dziękuję Kolegom za drogowskazy.

Smiga, w pierwszej wersji wpisywałeś dane do Array za pomocą Local Variable, a teraz przez Property. Jaka jest różnica? Tak musi być przy Producent/Konsument?

PozdrA

Re: Producent/Konsument - ciężkie początki :)

: 05 wrz 2010 23:31
autor: oczekp
zerknij sobie na tą stronkę, fajnie jest wszystko opisane, tylko, że po angielsku:
http://expressionflow.com/2007/10/01/la ... hitecture/

Re: Producent/Konsument - ciężkie początki :)

: 06 wrz 2010 00:38
autor: smiga
Agrest pisze:"...Local Variable, a ... Property. Jaka jest różnica?"
Wątki traktujące o temacie:
http://www.labview.pl/viewtopic.php?f=11&t=2695

http://labview.pl/viewtopic.php?f=12&t= ... ocal#p2396

... i oczywiście nie "musi być przy Producent/Konsument" - Ty decydujesz :)
Agrest pisze:Dziękuje Śmiga :)
... po co pociągnąłeś cluster sprzed Obtain Queue do Bundle w środku Eventa.
Też nie jest to konieczne - cel edukacyjny, czyli chciałem pokazać zależność.

W załączniku kod bez powyższego "celu edukacyjnego" , z poprawionym event'em "XY Graph": Mouse Down/Up (co słusznie zauważył Kolega Jogurt_owocowy) i z notyfikatorami zamiast kolejek ( kolejny cel edukacyjny :) ) + dodatkowa pętla, w której coś się jeszcze dodatkowo liczy ... żeby podkreślić, że konsument liczyć potrafi i powinien :)

Ważne jest to zdanie:
jogurt_owocowy pisze:Producent ma przesłać do konsumenta pewną logiczną paczkę danych ... Natomiast jest oczywiste, że paczka musi być najpierw wyprodukowana, a od tego jest producent właśnie.