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