Member-Methode zum Aufruf eines Threads verwenden?!
-
Hallo,
kann mir jemand von euch sagen, ob man auch eine Member-Funktion verwenden kann, um einen neuen Thread (<pthread.h>) zu starten?!
Normalerweise benutzt man ja dazu eine globale Funktion und übergibt deren Adresse an die Funktionpthread_create(.....);
.
Ich habe schon eine Klasse, die eine Methode des Typs (void*)()(void) enthalten sollte. Ohne den Aufruf von pthread_create kompiliert diese auch. Da die Funktion aber in der Klasse deklariert ist, beschwert sich der Compiler, dass die an pthread_create(...) übergebene Funktion vom Typ (void*)(Klasse::)(void) ist.Ist das ein bekanntes Problem?! Kann man das umgehen?! Ich hoffe, von euch hat jemand den Plan im Sack
Gruß,
Rolf
-
Hallo,
schau mal hier:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-48278.html
-
Vielen Dank!!!
Hab zwar nach Thread im Forum gesucht, aber die Suche hat leider nix ausgespuckt.
Der Beitrag beschreibt ja genau mein Anliegen. Leider habe ich jetzt ein anderes Problem. Der Compiler scheint die Member-Funktion nicht mehr zu kennen, wenn sie statisch deklariert wird:Error 566: "/home/rkasel/ApiCallWatcher.cxx", line 6 # Static class member "static void *ApiCallWatcher::print_message_function(void *)" may not have this
storage class.Man könnte meinen, ich hätte in der Header-Datei das static vergessen. Hab ich aber nicht..
Gruß,
Rolf
-
Du musst i.d. definition das "static" weglassen.
-
Hi. Vielen Dank erst mal für die ganzen Antworten....,
hab das Static weggelassen. Aber so richtig funktionierts immer noch nicht.
Die Fehlermeldung entspricht wieder in Etwa der Ersten:
Error 212: "/home/rkasel/ApiCallWatcher.cxx", line 124 #
Argument type 'void (ApiCallWatcher::)(void *)' does not match expected
parameter type 'void ()(void *)'.
pthread_create(&(*it)->plugin_thread, NULL, &ApiCallWatcher::print_message_function, (void*)"BLA");....oder liegt das vielleicht daran, dass ich die statische Methode in einer anderen, nicht statischen Member-Funktion aufrufen will?
Ich gebs bald auf...
Gruß,
Rolf
-
Schau dir nochmal das Beispiel aus der FAQ an. Ein statische Methode kannst du natürlich direkt als Funktionspointer übergeben. Ansonsten musst du dir eine statische Methode basteln, die den Memberpointer aufruft.