Thread der in Member-Variablen schreibt
-
Hi.
Habe derzeit ein designtechnisches Problem, hoffe jemand lann mir dabei helfen.Angenommen ich habe eine abgeleitete Klasse:
class Foo : public Bar { protected: int x; int y; public: //Hier wird ein Thread gestartet void startUpdatingVars(); };Jetzt möchte ich einen Thread laufen lassen, der regelmäßig Werte in x und y schreibt. Wie lässt sich das am besten lösen?
Ich müsste ja die Thread-Funktion als static deklarieren womit ich keinen Zugriff mehr auf die Member-Variablen hätte.Habe gerade keine Ahnung wie ich das machen soll, vlt auch einfach nur Brainlag.
Mein einziger Ansatz wäre es eine Memberfunktion zu schreiben die Zeiger auf die Membervariablen zurückgibt...aber das klingt ziemlich dreckig, meiner Meinung nach. (Vor allem handelt es sich in der Realität um 21 Variablen, nicht 2.
Wäre trotzdem über Antworten froh !

-
Du könntest der Thread-Funktion einen Zeiger auf das Objekt geben.
Icematix schrieb:
Mein einziger Ansatz wäre es eine Memberfunktion zu schreiben die Zeiger auf die Membervariablen zurückgibt...
Ich sehe nicht, wie das bei dem Problem helfen könnte.
-
Wenn du Boost.Thread verwendest, dann kannst du als Thread-Funktion mitgeben was du willst (=einen beliebigen Funktor).
Dadurch kannst du z.B. einen mit boost::bind an das Objekt "gebundenen" Member-Function-Pointer mitgeben (
boost::bind(&MyClass::ThreadFunction, this)).Spart mächtig viel Zeit.
Zeit, die du dann darin investieren kannst, dich über Speichermodelle, Sichtbarkeit von Änderungen, Synchronisation etc. schlauzulesen. Also das, was man zum Thema Threading wissen sollte, wenn man nicht auf die Nauze fliegen will.