Thread aus Objekt heraus erzeugen. Scope?
-
Hallo zusammen,
... und ein froher Gruss erstmal in die Runde!
Schon eine Weile beschäftigt mich ein Problem, für dass ich keine Lösung finde.
Google to the max und Rumprobieren brachten auch nichts.Code: http://pastebin.com/d4c0fb65c
Ich möchte im Konstruktur meiner Klasse beim Aufrufen gerne einen Thread erzeugen.
Leider bekomme ich einen Kompilierungsfehler für pthread_create()Fehler: Argument des Typs »void (IpCam::)(void*)« passt nicht zu »void* ()(void)« ipcam.cpp: In function »void* capture_thread(void*)«:*
Wenn ich das dritte Argument abändere zu ...
rc = pthread_create(&threads[t], NULL, &IPCam::capture_thread, param);
... kann nicht zum gewünschten Datentyp gecastet werden.
Fehler: »void (IpCam::)(void)« kann nicht nach »void* ()(void)« für Argument »3« nach »int pthread_create(pthread_t*, const pthread_attr_t*, void* ()(void), void*)« umgewandelt werden*
Würde mich sehr freuen, falls jemand meinen Denkknoten lösen kann.
Danke und Gruss,
DudePS: (Muss ich gcc zwingend ein "--pthread" Flag mitgeben?)
-
Ich verweise jetzt einfach nur auf meinem Post in Thread nebenan:
http://www.c-plusplus.net/forum/viewtopic-var-p-is-1719867.html#1719867Haben wir keinen FAQ Eintrag für diese Methodenzeiger? Die Frage kommt ja fast täglich.
Edit: Vielleicht noch ein Zusatz, an pthread wirst du wohl nur eine statische oder freie Funktion übergeben können.
Mit Boost.Thread ist dies nicht der Fall:
http://www.boost.org/doc/libs/1_39_0/doc/html/thread.htmlBoost.Thread ist sowieso optimiert für den C++ Einsatz. Kann man sich allerdings natürlich mit pthread nachbauen, wenn man möchte
Grüssli
-
LaDispute schrieb:
Ich probiere es jetzt mal mit BOOST Threads. POSIX Threads wären mir allerdings lieber. Möchte das aber ungern nachbauen haha
Hmm, warum wären dir POSIX Threads lieber? Boost.Thread kapselt in den meisten Fällen pthread, auf anderen Platformen wo pthread nicht vorhanden ist, werden halt andere Schnittstellen verwendet. Aber für dich bleibt alles gleich und Boost.Thread ist halt wirklich für den C++ Gebrauch gedacht.
LaDispute schrieb:
Weißt du ob es mit APR Threads auch dynamisch geht?
Zuerst müsstest du mir sagen was du unter APR Threads verstehst und danach was du mit dynamisch meinst
Grüssli
-
Mit APR Threads meine ich dieses fancy Zeug hier:
http://apr.apache.org/docs/apr/1.2/group__apr__thread__proc.htmlMit "dynamisch" meinte ich einfach, dass ich den Thread mit einer Methode verknüpfe die mir einen Zeiger liefert statt bspw. einen int. Ungeschickt ausgedrückt, ich weiß.
Ich check jetzt mal die BOOST lib.
Danke schonmal!
PS:
Etwas Lesenswertes für alle Mitleser
http://www.fz-juelich.de/jsc/docs/bhb/bhb_html/d0140/chapter_8/section_16.html
-
Habe noch nie mit den APR Threads gearbeitet. Allerdings scheint es ein reines C Interface zu sein. Und ein C Interface kann nunmal nicht mit Zeiger auf Klassenmethoden umgehen, sondern nur mit freien Funktionszeigern oder statischen Klassenfunktionen.
Und hab kurz nachgeschaut, wir haben einen uralten FAQ Eintrag, um genau zu sein der erste Eintrag in der C++ FAQ überhaupt.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39450.htmlMan sollte die FAQ mal überarbeiten, jemand lust?
Grüssli