Thread an Memberfunktion binden
-
Ich dreh noch durch mit den Bindern. Die von der STL sind mir irgendwie schon zu hoch und man braucht sie irgendwie fast nie. Wenn ich mir da boost anschaue versteh ich gar nix mehr.
Mein Problem:
std::mem_fun(&Socket::read)(this); // (zum Test) das geht /* Nun möchte ich das this an das Funktionsobjekt binden */ thread = new boost::thread( std::bind1st( std::mem_fun(&Socket::read), this ) ); // geht nichtedit: Ist das eigentlich irgendein Gesetz dass man es immer da hinbekommt wenn man gerade gefragt hat? Klappt nun mit Boost, gehts auch mit der STL (also der Bind, der Thread ist klar)?
thread = new boost::thread( boost::bind( std::mem_fun(&Socket::read), this ) );Vielen Dank für die Hilfe
Gruß
-
Für die Binder der STL gibt's nen Defect Report. Die Dinger formen ganz schnell mal Referenzen auf Referenzen, was dann zu komischen Fehlermeldungen führt an denen man verzweifelt
Mit C++0x gibt's da wohl eine Verbesserung.Eine vorgeschlagene Lösung von Stroustrup war übrigens, Referenzen auf Referenzen einfach wie normale Referenzen zu behandeln. Ein Redesign der STL-Binder gibt's aber sowieso, da sie noch einen anderen Fehler haben (Pointer-Typen können an andere Pointer-Typen gebunden werden, obwohl sie nicht kompatibel sind).
-
Hm, damit läuft Read dann in einem eigenen Thread.
Wie sieht die Methode aus ? Versuchst du damit permanent zu lesen ?
Oder ist das Eventbasiert ?
Wie bekommst du die Daten dann aus dem Thread ?Nur so aus interesse

-
Ich habe einen Buffer als Stringstream implementiert. Die Methode fürs Socket lesen ruft recv() im normalen Blocking Mode auf. Wenn was gelesen wird dann wird falls gesetzt der Callback onRecive aufgerufen (mit boost::function<void ()>).
Ich schreib zum ersten mal eine kleine Socketlibrary für mein aktuelles Programm in der Hoffnung ich kann sie später nochmal zu verwenden.
Das mit der Referenz auf die Referenz ist ziemlich nervig hab ich jetzt schon mitbekommen

Gruß