pthread in klasse starten?
-
ich versuch nen pthread in ner klasse zu starten
aber irgendwie klappt das nicht so wie wenn ich es nur als funktion verwendehilfe
-
Was zur Hölle ist ein pthread?
-
Artchi schrieb:
Was zur Hölle ist ein pthread?
pthread steht für Posix Thread und ist die Thread-Spezifikation des POSIX 1003.1c-1995 Standards (Teil der Single UNIX Specification)
Es gibt verschiedene Implementationen dieser Spezifikation u.A. für Linux und Windows.ich versuch nen pthread in ner klasse zu starten
Was meinst du damit? Soll der Einstiegspunkt deines Threads eine Methode sein?
Das geht nicht direkt.
Du kannst aber eine statische Methode verwenden, die direkt zu deiner
eigentlichen Thread-Main-Funktion deligiert:class Foo { public: static void* threadEntryPoint(void* o) { return static_cast<Foo*>(o)->run(); } void* run() { // deine Thread-Code hier } ... }; int main() { Foo f; pthread_t thread; pthread_create(&thread, 0, &Foo::threadEntryPoint, &f); ... }
Natürlich kannst du die Thread-Erzeugung auch direkt in Foo erledigen.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
debian inside schrieb:
ich versuch nen pthread in ner klasse zu starten
aber irgendwie klappt das nicht so wie wenn ich es nur als funktion verwendeDu musst schon deine Fragen richtig stellen, damit man sie beantworten kann
wmfrs <-- lesen!
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Die Startfunktion eines Threads darf nicht eine static Funktion innerhalb einer Klasse sein, sondern muss eine freistehende Funktion mit C Bindung sein, auch wenn ersteres meistens klappt.
Zum Beispiel:
extern "C" void * start_thread(void * arg) { return static_cast<Foo*>(arg)->run(); }
Weitere Infos in der comp.programming.threads FAQ:
-
danke
warum kann dieser thread der gestartet wurde nicht auf die elemente der klasse zugreifen?
ich bekomm immer speicherzugriffsfehler
-
debian inside schrieb:
danke
warum kann dieser thread der gestartet wurde nicht auf die elemente der klasse zugreifen?
ich bekomm immer speicherzugriffsfehlerDu solltest ein minimales, lauffähiges Programm posten, dass den Absturz zeigt.
-
Ponto schrieb:
Du solltest ein minimales, lauffähiges Programm posten, dass den Absturz zeigt.
ne das wird mir zu kompliziert
da ist der code mit funktionen noch übersichtlicherhabs jetzt mit normalen funktionen und threads gelöst
-
debian inside schrieb:
danke
warum kann dieser thread der gestartet wurde nicht auf die elemente der klasse zugreifen?
ich bekomm immer speicherzugriffsfehlerHast du die -lpthread dazugelinkt?
-
Headhunter schrieb:
Hast du die -lpthread dazugelinkt?
ja
klappt schon danke
-
#include <pthread.h> class f { public: f() { pthread_create(&p, NULL, &extf, this); } ~f() { pthread_detach(p); } void *run() { //Programm } private: pthread_t p; } extern "C" void *extf(void* This) { return static_cast<f*>(This)->run(); }
[EDIT] hab noch den destruktor mit pthread_detach() hinzugefügt
-
Was passt damit nicht?
(Oder warum postest Du das jetzt?)
-
nman schrieb:
Was passt damit nicht?
(Oder warum postest Du das jetzt?)ich wollte es nur nochmal zusammenhängend posten
und nicht vergessen, -lpthread dazulinken