Parametr pthread_create - dotaz na C++ckare

Petr Novotny Petr.Novotny na antek.cz
Pondělí Březen 8 15:17:08 CET 1999


> >  Mozna ze by pomohla deklarace:
> > class MujThread {
> >  public:
> >   static void* muj_thread(void *xx)
> > }
> 
> Tohle pomuze, ale jak jsem pochopil z ruznych debat, tak to, ze
> tohle projde je 'laskavost' kompilatoru, a udajne jsou takovy, se
> kteryma tohle nejde (jako priklad kdosi kdesi kdysi uvadel nejaky
> cecko od IBM). Takze 100% :-) prenositelne je to treba udelat pres C
> funkci, ktery je ovsem nejak vhodne predat informaci o objektu a
> metode, ktera se ma volat jako 'telo' threadu, treba pomoci
> strukturky...

Neexistuje vec, ktera je 100% prenositelna; jsou veci, ktere jsou 
dostatecne prenositelne. Neni duvod, aby nefungovalo neco jako

void MujThread::muj_thread(void *ptr)
{ ((MujThread *)ptr)->muj_thread() }

vytvareni threadu pak nejak jako
MujThread promenna;
...
pthread_create(neco,neco,MujThread::muj_thread,&promenna);

kde muj_thread je cistokrevna member funkce. Je samozrejme mozne, ze 
z toho kompilator udela padajici kod - a to v pripade, ze staticka 
metoda objektu ma jinou implicitni volaci konvenci, nez samotna 
Cckova funkce; takovy kompilator je ale Very Broken(tm) a v /dev/null 
mu bude lepe.
--
Petr Novotny, ANTEK CS
Petr.Novotny na antek.cz
http://www.antek.cz
-- Don't you know there ain't no devil there's just God when he's drunk.
                                                             [Tom Waits]


Další informace o konferenci Linux