• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

łańcuch wywołania funkcji

Object Storage Arubacloud
+1 głos
257 wizyt
pytanie zadane 13 lipca 2022 w C i C++ przez RufinB Obywatel (1,830 p.)

czytając książkę o przetwarzaniu współbieżnym natknąłem się na taką funkcje: 

void atm::getting_pin()
{
incoming.wait()
.handle<digit_pressed>(
[&](digit_pressed const& msg)
{
using const pin_lenght=4;
pin+=msg.digit;
if(pin.lenght()=pin_lenght)
{bank.send(verify_pi(account,pin,incoming));
state=&atm::verifying_pin;
}
}
)
.hendle<clear_last_pressed>(
[&](clear_last_pressed const&msg)
{
if(!pin.empty())
{
pin.resize(pin.lenght()-1);
}
}
)
.handle<cancel_pressed>(
[&](cancel_pressed const& msg)
{state=&atm::done_processing;
}
);
}

czy moglibyście podesłać mi jakieś materiały na temat łańcucha wywołań bo z czyś takim spotykam się pierwszy raz i nie za bardzo wiem jak to działa ani od czego zacząć naukę

1 odpowiedź

+1 głos
odpowiedź 13 lipca 2022 przez Wiciorny Ekspert (270,590 p.)
wybrane 13 lipca 2022 przez RufinB
 
Najlepsza
Łańcuch wywołań to nic innego jak wywoływanie funkcji ( np kilku, lub jednej kilkukrotnie), w innej funkcji.
Dlaczego łańcuch, bo zakończenie najbardziej zewnętrznej funkcji, będzie ostatecznie zdjęte ze stosu dopiero gdy wszystkie funkcje wewnętrzne zwrócą wynik, lub zostaną wykonane i zakończone.
Dla przykładu
Funkcja wait()-  obejmuje zakres trzykrotnego wywołania funkcji handle() która zwraca różny typ określony dla każdego z przypadków.

Więc tak określony łańcuch wywołań powoduje, że zewnętrzna funkcja wait i ogólnie zewnętrzne funkcje oczekują na rezultat. Jeśli teraz w takim łańcuchu wywołań funkcja zewnętrzna OCZEKUJE tylko 1- rodzaju rezultatu na jej zakończenie, to niezależnie od wszystkich przetwarzanych w tym momencie operacji, jedyny -kończący, będzie ten spełniający np dany warunek.
Przykład buildera pattern :
https://helloacm.com/c-object-method-chaining/
komentarz 13 lipca 2022 przez RufinB Obywatel (1,830 p.)
dzięki
1
komentarz 13 lipca 2022 przez Wiciorny Ekspert (270,590 p.)
nawiązując do pytania, generalnie często coś prostego ubierane jest w "idee" które niepotrzebnie coś komplikują pod "dobrym hasłem'. Jesli chces zająć się wielowątkowością i współbieżnością to zajmij się tymi tematami, wtedy nieco jaśniej może okazać się idea problemu łańcuchu funkcji.
Wyobraź sobie taki łańcuch wywołań w sytuacji kiedy dostęp do tego ma kilka równocześnie uruchomionych wątków danego procesu, problem może okazać się złożony, a funkcje mogą jeśli są źle zaimplementowane, blokować się wzajemnie
https://cpp0x.pl/kursy/Kurs-WinAPI-C++/Zaawansowane/Watki/337
https://cpp0x.pl/dokumentacja/Programowanie-wspolbiezne/410
https://kcir.pwr.edu.pl/~kreczmer/zamp/materialy/zamp-wyklad-5.pdf
komentarz 14 lipca 2022 przez j23 Mędrzec (194,920 p.)

@Wiciorny, 

Funkcja wait()-  obejmuje zakres trzykrotnego wywołania funkcji handle() która zwraca różny typ określony dla każdego z przypadków.

Jak różny? IMO handle zwraca referencję na obiekt na rzecz którego została wywołana.

Jak to widzę tak, że wait zwraca jakiś obiekt przez wartość, obiekt ten przejmuje muteksa (być może wait robi to wcześniej). Obiekt tej klasy posiada metodę handle, która pozwala na ustawienie funkcji obsługi zdarzeń. W momencie niszczenia obiektu w destruktorze zwalniany jest muteks i następuje oczekiwanie na zdarzenie.

Podobne pytania

+1 głos
0 odpowiedzi 393 wizyt
pytanie zadane 30 października 2021 w C i C++ przez nufak1 Nowicjusz (130 p.)
0 głosów
1 odpowiedź 197 wizyt
0 głosów
1 odpowiedź 271 wizyt
pytanie zadane 3 listopada 2016 w C i C++ przez Ziom Początkujący (430 p.)

92,615 zapytań

141,465 odpowiedzi

319,782 komentarzy

61,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...