🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #309615

Re: Szukam przykładu thread_pool

#309615
From: bartekltg
Date: Sun, 14 Jan 2018 03:33
101 lines
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-mail
References: <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