Parametr pthread_create - dotaz na C++ckare

Tomas Jura jura na vorvan.sh.cvut.cz
Sobota Březen 6 17:41:53 CET 1999


> Dobry den,
> 
>   delam v Linuxu multithreadovy program a mam nasledujici problem. Funkce
> pthread_create ma jeden parament funkci, kterou se thread spusti, je typu
> void * (*start_routine)(void *). Kdyz si vytvorim v programu funkci typu
> void* muj_thread(void *xx), tak volani pthread_create(&muj_thread) funguje
> korektne. Jenze ja chci mit rutiny threadu v objektu. Takze pisu:
> 
> class MujThreadT
> {
>  public void * muj_thread(void *xx)
> ....
> }
> 
> MujThreadT Muj;
> create_pthread(&Muj->muj_thread)
> ^^^^^^^^^ a toto ale uz nefunguje, hodi to nekompaktibilitu typu. Pokousel
> jsem se to ruzne pretypovat, ale asi spatne. Nevite nekdo, jak to vyresit?
> 
 Ja bych rekl, ze u metod objektu v C++ maji nestaticke metody skryty
parametr, ktery odkazuje na tridu. Cili metoda muj_thread ma ve
skutecnosti prototyp (zapsano v C): void* muj_thread( MujThread&, void*)
 Mozna ze by pomohla deklarace: 
class MujThread {
 public:
  static void* muj_thread(void *xx) 
}

Takova metoda nema ten skryty odkaz na instanci.Jenomze, pak se takova
metoda nedozvi ukazatel na svuj objekt. Ledaze by ho clovek nejak
propasoval do toho void argumentu. (Nevim co se v nem predava). 

				Tomas 



Další informace o konferenci Linux