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 ]
000
30.05.2007, 17:30 Uhr
FunnyDingo



Hallo zusammen,

leider spuckt google zu dem Thema nicht viel aus. Kann ich (irgendwie) einen Methodenpointer in einen Funktionspointer casten? Ich befürchte wohl eher nicht.

Hintergrund: ich möchte mit Threads arbeiten und mit pthreads ist das ja auch recht easy. Also wollte ich mir eine Art Wrapper-Klasse dafür schreiben. Während meiner Gedankengänge dazu ist mit eingefallen, dass pthread_create als dritten Parameter ja einen Funktionspointer haben will. Da ich aber überall mit Klassen arbeite (entweder als Objekte oder als Singleton) wird sich pthread da sicher sehr schwer tun, mir einen Prozess anzulegen.

Habe ich nun verloren und muss alle Klassen die mit Threads zu tun haben auf Funktionen umstellen?

Gruß,
Funny
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 30.05.2007 um 17:33 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.05.2007, 17:34 Uhr
xXx
Devil


hmm du kannst am einfachsten eine "static-Funktion" nehmen ^^ Oder dich mal in die Thematik einlesen: www.function-pointer.org
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.05.2007, 17:36 Uhr
FunnyDingo



Der Link klingt gut - da hab ich ja ne gute Lektüre für heute Abend ;-)
--
"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
003
30.05.2007, 18:09 Uhr
virtual
Sexiest Bit alive
(Operator)


Wenn Du magst, kann ich Dir mal meinen pthread C++ Wrapper zukommen lassen. Den hab ich noch irgendwo rumliegen (Bei Interesse: Private message an mich mit Emailadresse)
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.05.2007, 18:39 Uhr
Blubber2063



Bau dir ne statische Methode die nen Zeiger auf deine Thread Klasse bekommt, das Ding startet dann den Thread(run methode oder ähnliches) über das Objekt, also den statischen Methoden Zeiger an PThreadCreate geben.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.05.2007, 20:37 Uhr
FunnyDingo



Also wie mir die statischen Methoden bei der Geschichte weiterhelfen sollen, habe ich noch nicht wirklich 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
006
30.05.2007, 20:41 Uhr
Blubber2063



Na recht einfach, eine statische Methode kannst du an PThreadCreate weiterreichen, du wrappst den Methoden launch einfach, in dem du einen Zeiger auf das Thread Objekt. In der Methode wirst du dann auf dem übergebenen Objekt deine Run Methode aufrufen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
31.05.2007, 08:29 Uhr
FunnyDingo



Okay, sagen wir mal, ich habe 2 Klassen (aus dem Kopf zusammen getippt!):

C++:
class class_npmhttp : public class_npmbase
{
    public:
        class_npmhttp();
        ~class_npmhttp();
        void listen();
        void send();
};
[...]
class class_logger
{
    public:
        class_logger();
        ~class_logger();
        void work();
        void log(std::string);
};


Von class_npmhttp habe ich 2 Instanzen (http_1 und http_2) und von class_logger nur eine (logger). Jetzt könnte ich class_npmhttp::listen() und class_logger::log() static machen, aber dann gehören sie ihr zur Klasse und nicht mehr zum Objekt. Dann habe ich ja keine Möglichkeit mehr, aus den static-Methoden auf die non-static-Member zuzugreifen (z.B. listenIP, listenPort, maxConnections, etc).

Oder habe ich deinen Vorschlag missverstanden?
--
"Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral." (John James Osborne)

Meine Website: http://www.funnydingo.de

Dieser Post wurde am 31.05.2007 um 08:30 Uhr von FunnyDingo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
31.05.2007, 08:46 Uhr
Blubber2063



Ich mach mal nen Beispiel, startThread(functionszeiger, parameter), soll hier mal den Posix call simulieren.

C++:
class Thread{
  public:
    Thread();
    virtual ~Thread();
    virtual void run();
    virtual void start();
    static void startMyThread(void*);
}

Thread::startMyThread(void * obj){
  dynamic_cast<Thread*> obj;
  obj->run();
};

Thread::start(){
  startThread(startMyThread, this);
}




Grob skizziert sollte das ganze so aussehen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
31.05.2007, 15:44 Uhr
0xdeadbeef
Gott
(Operator)


Ich würd mir mal Boost.Thread ankucken. Da gehts dann mit Funktoren.
--
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: