nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Re: C++ & Adressen von Methoden und Klassen

Von: Jens Hibbeler (jens.hibbeler@ottogroup.com) [Profil]
Datum: 16.05.2006 14:06
Message-ID: <1147781215.888442.269350@g10g2000cwb.googlegroups.com>
Newsgroup: de.comp.lang.iso-c++
Hallo,

meine Lösung sieht jetzt so aus, dass ich den das Starten des Threads
in die Basisklasse verlagert habe. Diese ruft dann statische Funktionen
der Abgeleiteten Klassen auf und führt diese in einem Thread aus. Habe
ich so gemacht, da pthread nur c-Funktionen ausführen kann.
Damit der Objektbezug nicht verloren geht, schleife ich in einer
Struktur noch immer eine Instanz des Objekts mit.

Beispiel (so in etwa):
[CODE]
Basisklasse:
class BackendAdapter  {

public:void starteBackendThread(void *(*MethodenName) (void *), void
*arg );

};[/CODE]
[CODE]Abgeleitete Klasse
class BackendAdapterArtikelPosition{
void *  BackendAdapterArtikelPosition::bestandsAnfrage (void *arg)//,
HWND hWnd)
{
struct bestandsAnfrageRequest *temp=(bestandsAnfrageRequest *) arg;
//Mache was mit dem Objekt
temp->temp;
...
}
};[/CODE]

und dann in der Klasse die das Ganze benutzt:
[CODE]
BAAPI->bestAnfrageReq.tempºAPI;

BAAPI->starteBackendThread(BackendAdapterArtikelPosition::bestandsAnfrage,
(void*)&BAAPI->bestAnfrageReq);[/CODE]

Ich hoffe das funktioniert. War jetzt auf die Schnelle ohne zu testen.
Vorteil:
-Kein Mapping auf die Methoden
-Threads werden in der Basisklasse gestartet
-Keine extra C-Funktionen nötig, die C++ Funktionen starten

Nachteil:
-Parameterübergabe für Methoden erfolgt nur über Structs
-Objekte müssen duchgeschliffen werden, damit der Bezug nicht verloren
geht

Danke für Eure schnelle Hilfe!

Viele Grüße,

Jens

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod@bud.prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq@bud.prima.de

[ Auf dieses Posting antworten ]

Antworten