Ich versuche, einen separaten Thread zum Aufrufen einer Funktion auszuführen, weil er einen Aufruf von execl () verwendet und damit mein Programm beendet (ich bin auf Windows und kann fork () nicht verwenden). Die Kombination von Threading mit Klassen bereitet mir harte Zeiten.
Nach einigem Googeln habe ich verstanden, dass ich diese letzte Funktion als Freund oder Statik verwenden muss und eine Art von diesem Zeiger verwenden soll. Ich habe meinerseits versucht, aber Teile passen nicht zusammen. Ich bin sogar nicht in der Lage, den Fehlertyp zu ändern. Es frustriert mich jetzt. Den gleichen Fehler erhalten:
kann Scoreget :: basicgetscore nicht vom Typ void * (Scoreget ::) () in type void * (*) (void *)
umwandeln
Deklarieren Sie es als statisch und fügen Sie eine weitere Hilfsmethode hinzu:
%Vor%erstellt Pthread mit:
%Vor% Seien Sie auch sehr vorsichtig. Sie geben diesem Thread die Adresse einer temporären Variablen. In diesem speziellen Fall ist es sicher, da pthread_join dieselbe Funktion hat. Wenn Sie jedoch vor dem Beenden des Threads von der Funktion zurückkehren, wird die Zuweisung des Objekts, in dem Sie den Thread ausführen, rückgängig gemacht, was zu allen möglichen Arten führen kann widerliches Verhalten. Erwägen Sie, Ihre Funktion auf 1) eine Referenz oder einen Zeiger oder 2) auf this
zu aktualisieren.
Sie können die nicht statische Methode nicht an pthread_create
übergeben Erstellen Sie am einfachsten eine statische Methode, die basicgetscore
So ähnlich
%Vor% Sie müssen eine (statische) Nichtmitgliedsfunktion definieren, die als Thread-Funktion für pthread_create()
übergeben wird. Die Referenzierung von Ihrem Objekt hilft nicht, da dies ein Funktionszeiger ist, der von dieser Funktion erwartet wird. Sie können jedoch einen Zeiger auf Ihre Objektinstanz übergeben, indem Sie den Benutzer args void * pointer verwenden.
Tags und Links c++ multithreading