Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Nur Thread erlauben auf Member von Klasse zuzugreifen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.04.2010, 12:00 Uhr
Moritz1243



Hallo zusammen,

in meinem aktuellen Programm sucht ein Thread nach Server Sockets, das funktioniert soweit auch einwandfrei. Jedoch greift der Thread dafür auf Member einer Klassse zu, welche ich dafür als publich deklariet habe. Meine Frage ist nun, wie ich es nur dem Thread ermöglichen kann auf die Member der Klasse zuzugreifen?

in Pyeudocode sieht das so:


C++:
Klassse KKlassse
{
  public:
    int var;
    void funktion(void);
    void startthread(void);
}

void KKlasse::startthread(void)
{
    _beginthread(Thread, 0, this);
}

void Thread(void* lpClass)
{
KKlassse *klasse = (KKlasse*)lpClass;

klasse->var = 123;
klasse->funktion();

}


Dieser Post wurde am 17.04.2010 um 12:00 Uhr von Moritz1243 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.04.2010, 15:03 Uhr
Tommix



Hallo,


Zitat von Moritz1243:
Hallo zusammen,

in meinem aktuellen Programm sucht ein Thread nach Server Sockets, das funktioniert soweit auch einwandfrei. Jedoch greift der Thread dafür auf Member einer Klassse zu, welche ich dafür als publich deklariet habe. Meine Frage ist nun, wie ich es nur dem Thread ermöglichen kann auf die Member der Klasse zuzugreifen?


Indem Du Thread zur statischen Member-Funktion eben jener Klasse machst. Dann können die Member private sein.


C++:
class KKlasse
{
    int var;
    void funktion(void);
    static void Thread(void*);
public:
    void startthread(void);
}

void KKlasse::startthread(void)
{
    _beginthread(Thread, 0, this);
}

void Klasse::Thread(void* lpClass)
{
KKlassse *klasse = (KKlasse*)lpClass;

klasse->var = 123;
klasse->funktion();

}



Gruß, Tommix

Dieser Post wurde am 17.04.2010 um 15:05 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.04.2010, 15:26 Uhr
Moritz1243



danke für die antwort, die idee hatte ich auch, aber ist es nicht schlecht eine member funktion statisch zu machen? müssen die variablen dann auch statisch sein?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.04.2010, 18:51 Uhr
Tommix



Die Funktion muß statisch sein, weil eine nicht-statische Funktion den this-Zeiger als unsichtbaren Parameter bekommt. Die Thread-Funktion könnte damit nichts anfangen. Die Variablen müssen nicht statisch sein, da Du über den klasse-Zeiger zugreifst und nicht direkt.
Das ganze ist, soviel ich weiß, die übliche Vorgehensweise.
- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.04.2010, 12:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


evtl empfiehlt sich da auch die benutzung von z.b boost, dort kann man dem thread dann auch eine nicht-statische funktion zum aufruf geben (also z.b mit boost::bind)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: