Article View: pl.comp.lang.c
Article #309615Re: Szukam przykładu thread_pool
From: bartekltg
Date: Sun, 14 Jan 2018 03:33
Date: Sun, 14 Jan 2018 03:33
101 lines
4416 bytes
4416 bytes
On Saturday, January 13, 2018 at 8:25:16 PM UTC+1, Borneq wrote:
> W dniu 13.01.2018 o 14:09, Borneq pisze:
> > https://en.wikipedia.org/wiki/Thread_pool
>
> Standardowy przykład:
> https://github.com/vit-vit/CTPL/blob/master/example.cpp
>
> 1. co znaczy } second(", functor");w linii 50?
Popatrz wyzej.
class Tbla {
//implementa ja klasy Tbla
} bla1(1), bla2(), bla3("tdsr");
Tworzysz tam obiekt dopiero co zdesiniowanej klasy Second
odpalajac konstruktor z łancuchem ", functor" jako argumentem
> 2.
> co znaczy:
> std::future<void> qw = p.push(std::ref(first)); // function
Dodajesz do kolejki rzeczy do odpalenia funkję first.
Push zwraca future do wyniku. first zwraca void, więc sam
wynik nieprzydatny, bo go nie ma, ale i tak możesz
takeigo future'a uzyc do poczekania na zakończenie działania
funkcji albo sprawdzenia czy funkcja już zakonczyla działanie.
https://stackoverflow.com/a/10891052
> poza tym są : p.push(aga, 7); // function
Dodaje do kolejki funkcję aga, która zostanie odpalona
z arumentami aga(numer_watku, 7)
> poza tym jak wołać asynchronicznie metodę obiektu?
Tak jak do każdego czegoś, co potrzebuje funkcji,
thread czy async.
Sposób 1: chyba toto się nazywa pointer to member function.
Mamy klasę
class bla{
void run (int a, double b);
}
teraz &bla::run jest w pewnym sensie funkkcją, która pobiera trzy parametry,
wskaźnik do klasy typu bla, a, b.
Więc odpalasz
p.push( &bla::run, &bla1, a, b );
http://thispointer.com/c11-start-thread-by-member-function-with-arguments/
Tylko tu twoja kalsa musi być kompatybilna z pulą, bo ta chce, by wszytko,
co wejdzie jako jej pierwszy argument było intem - numerem watku.
b
Sposb 2, lepszy. Daj jej lambdę.
bla bla1;
p.push( [&bla1](int id, int a, double ) {bla.run(a,b);} );
> co znaczy p.push(Second(", functor")); // functor, move ctor
A bo widzisz, w kolejce nie muszą siedzieć tylko funkcje. Możesz
podać obiekt funkcyjny - taki obiekt, który ma operator ().
Wizualnie odpala się go jak funkcja. I na pewno używając c++
niejednokrotnie takich obiektów uzywaleś. std::less<int>() ;-)
No to pchasz tam taki obiekt, powstały przez odpalenie takeigo
a nie innego konstruktora klalsy Second.
Większość tych pytań nie ma nic wspolnego z tą biblioteką
czy pulami wątków, a ze zwykłym c++.
> są dwa wątki w p, ale jest aż 6 razy push, co robi push?
Dodaje zadania do kolejki zadań.
A wątki je sobie bądą po kolei wybierać i wykonywać.
> Doszedłem do tego że push uruchamia wątek,
Nie!
On dodaje zadanie. Wątki są dawno uruchomione
i siorbią sobie powolutku zadania z kolejki.
> a pop?
Zapewne wyzciąga zadanie z kolejki. To jeszcze nie wykonane.
Do tego odpowiednio opakowane, a nie w oryginalnej formie.
Znajdź bibliotekę z dokumentacją;-)
A jak nie, to musisz czytać kod;]
pzdr
bartekltg
Technical Details
Message-ID:
<3f9208f5-2d5f-4b25-bc54-8b0e23bc55c9@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!z1no1639303qta.0!news-out.google.com!g8ni1082qtk.0!nntp.google.com!i22no1433381qta.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mailReferences:
<p3d0dt$k1h$1@node2.news.atman.pl> <p3dmeq$8pr$1@node2.news.atman.pl>Show Full Headers
Complete Article Headers
X-Received: by 10.200.52.5 with SMTP id u5mr21864192qtb.35.1515900832259; Sat, 13 Jan 2018 19:33:52 -0800 (PST) X-Received: by 10.31.174.73 with SMTP id x70mr3321035vke.8.1515900832109; Sat, 13 Jan 2018 19:33:52 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!z1no1639303qta.0!news-out.google.com!g8ni1082qtk.0!nntp.google.com!i22no1433381qta.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Sat, 13 Jan 2018 19:33:51 -0800 (PST) In-Reply-To: <p3dmeq$8pr$1@node2.news.atman.pl> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=2a02:a311:413d:3780:207b:a568:984c:ecc; posting-account=CvUQzQoAAABvVQmR58QmR6N4Cev1qhAS NNTP-Posting-Host: 2a02:a311:413d:3780:207b:a568:984c:ecc References: <p3d0dt$k1h$1@node2.news.atman.pl> <p3dmeq$8pr$1@node2.news.atman.pl> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <3f9208f5-2d5f-4b25-bc54-8b0e23bc55c9@googlegroups.com> Subject: Re: Szukam przykładu thread_pool From: bartekltg <bartekltg@gmail.com> Injection-Date: Sun, 14 Jan 2018 03:33:52 +0000 Lines: 108 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit