Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Und ich schon wieder: Methoden-Pointer und Funktionspointer?

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 ] > 2 < [ 3 ]
010
01.06.2007, 21:56 Uhr
FunnyDingo



Okay Blubber, ich glaube ich habe das verstanden. Ich frage mich aber noch, wie die Implementation von run aussehen soll.
C++:
pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);


Das ist mein eigentliches Problem. Der dritte Parameter ist doch ein Functionpointer, oder? Meine start_routine ist leider immernoch ein Methode einer Klasse, oder habe ich Blubbers Beispiel doch nicht verstanden?
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
01.06.2007, 22:18 Uhr
xXx
Devil


ist aber static ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
02.06.2007, 02:00 Uhr
Blubber2063



Nein hast du offensichtlich nicht, die static methode wrappt den Aufruf der run Methode und static Methoden sind ganz normale Funktionspointer, kannst du also an phtread_create übergeben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
02.06.2007, 20:08 Uhr
FunnyDingo



Uff.. Also. Ich verpasse allen Klassen die als Thread laufen sollen einen static Methode die als Parameter nen Pointer auf die Instanz übergeben bekommt. Diese wieder rum ruft dann die Methode auf, die ich eigentlich ausführen will. pthread_create kann ich somit a) als start_routine meine static Methode übergeben und b) als Parameter jener Funktionen einen Pointer auf das Objekt.

Jetzt hab ich es aber verstanden, oder?
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
02.06.2007, 20:41 Uhr
Blubber2063



Jo so ist das richtig, wobei du halt die static Methode nur in deiner Thread Klasse brauchst, danach betreibst du nur noch Veerbung und überschreibst die run methode.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
02.06.2007, 22:22 Uhr
FunnyDingo



Hm, aber eine Klasse von den Objekten die als Thread laufen sollen, ist bereits schon ein von einer Klasse abgeleitet. Beispiel wäre npm_http. Diese Klasse ist von npm_base abgeleitet. Aber wenn ich mich recht entsinne, habe ich mal gehört, in C++ gibt es Mehrfachvererbung - das müsste ja das sein was ich hier brauche. Da werd ich einfach mal nach googeln.

Ich danke auf jeden Fallen allen für die Mühe, ihr habt mir riesig weiter geholfen - ich dachte schon ich müsste mein komplettes Design über den Haufen schmeißen. Einfach nur Danke!
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
03.06.2007, 08:35 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


in C++ gibts natürlich Mehrfachvererbung - in Java gibts keine.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
03.06.2007, 11:41 Uhr
FunnyDingo



Habs auch schon gefunden. Ist ja wirklich einfach. Dann sollte ich ja alles so hinbekommen wie ich wollte. Abwarten wann das nächste Problem auftaucht *g*
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
03.06.2007, 19:27 Uhr
FunnyDingo



Hm, irendwas mag er da nicht:

C++:
void *class_thread::start(void *obj)
{
    dynamic_cast<class_thread*> obj;
    obj->run();
    return NULL;
}


Code:
threads/thread.cpp: In static member function 'static void* class_thread::start(void*)':
threads/thread.cpp:65: error: expected `(' before 'obj'
threads/thread.cpp:65: error: expected `)' before ';' token
threads/thread.cpp:65: error: cannot dynamic_cast 'obj' (of type 'void*') to type 'class class_thread*' (source is not a pointer to class)
threads/thread.cpp:66: error: 'void*' is not a pointer-to-object type


Wieso erkennt er denn nicht, das der Paramter ein Pointer auf ein Objekt ist?
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
03.06.2007, 20:19 Uhr
0xdeadbeef
Gott
(Operator)



C++:
class_thread *tmp = dynamic_cast<class_thread*>(obj);
if(tmp != NULL) {
  tmp->run();
} else {
  // Falsche Eingabedaten
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ 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: