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