Am Fre, 2003-07-04 um 14.29 schrieb Michael Gebhart:
Hi zusammen,
ich möchte (in C++) einen Thread starten, welcher eine Elementfunktion einer Klasse ausführt.
Also ich habe eine Klasse:
class testklasse { public: int erstefunktion(); void zweitefunktion(void *parameter); };
pthread_create(&thread_id, NULL, (void *)&testklasse::zweitefunktion, (void *)"test");
So hatte ich es versucht. Allerdings meldet der Compiler:
warning: converting from `void (testklasse::*)(void*)' to ` void*'
und
warning: invalid conversion from `void*' to `void*(*)(void*)'
Er kompiliert es zwar, jedoch bleiben diese Warnungen. Weiß jemand, was ich falsch mache?
Du castest die Adresse einer Member-Funktion [Typ: void (testklasse::*)(void*)] nach (void*) und versuchst diese an pthread_create an einer Stelle zu übergeben, an der ein Zeiger auf eine Funktion [Typ: void*(*)(void*)] erwartet wird. Beachte: Zeiger auf Member-Funktion/Methode vs. Zeiger auf Funktion. Wirf alle casts raus ("Casts are evil!" ;) ) und verwende eine echte Funktion statt einer Member-Funktion. Ralf