pthread_create Problem
-
Ich versuche mit pthread_create einen neuen Thread zu erzeugen:
//... /* Aus meiner Klasse entnommen, also bei this nicht wundern... */ pthread_t t1; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); pthread_create(&t1, &attr, (void*)&ILauncher, (void*)this); //... void* ILauncher(void* pVoid) { //... pthread_exit((void *) 0); return NULL; }
Es kommt aber immer: Warnung: invalid conversion from `void*' to `void*()(void)'
Ich habe es auch schon mit ILauncher statt &ILauncher und mit Rückgabetyp void statt void* versucht. Ich bekomme immer ein SIGSEGV. An der Funktion ILauncher liegt es nicht, wenn ich diese ohne Threads aufrufe funktioniert alles bestens...
-
Wie wäre es mit nur ILauncher und auch ohne irgendeinen Cast.
Dein this hört sich nach C++ an. Da kann man noch viel falsch machen. Zum Beispiel sollte ILauncher mit C Aufrufsemantik definiert werden. Also ein extern "C" drum herum.
Vieleicht kannst du das ganze mal zeigen.
-
Wie wär's, wenn du's einfach nicht auf void* casten würdest?
-
ähnelt ja sehr meinem stückchen code... du musst im pthread_create aufruf beim dritten parameter das (void *)& weg lassen...so das dort nur iLauncher steht.
-
Hab's jetzt geändert auf:
pthread_create(&t1, &attr, ILauncher, (void*)this);
Die Cast-Warnung ist weg, ich bekomme aber immernoch ein SIGSEGV.
-
Hast du auch mit -pthread kompiliert?
-
ja, ich verwende die -pthread Option...
-
Dann solltest du dir den Backtrace im Debugger anschauen, wo der abstürzt