boost::thread
-
hi
habe eine funktion geschrieben, die einen socket als parameter nimmt.
void TestFunk(SOCKET s)wenn ich die jetzt in einem thread laufen lassen will:
boost::thread t1(&TestFunk(s));
bekomme ich den fehler: error:c2102:'&' erwartet L-Wert
woran liegt das? habe leider nichts zur thread-syntax bei funktionen mit parameter gefunden.
gruß
ebro
-
Du mußt dich allgemein mit Funktions-Pointern und Funktions-Objekten beschäftigen. Du mußt einen Binder benutzen, um zus. parameter anzugeben. Das wird auch in der C++ Std-Lib so gelebt (beschäftige dich auch mal damit!) und das kann man auch in Boost bzw. boost::thread anwenden.
Kannst den binder von boost benutzen:
http://www.boost.org/libs/bind/bind.htmlAber der aus der C++ Std-Lib geht auch.
-
dank dir artchi, auf deine antwort hab ich gehofft

-
ich kriegs nich hin

also habe diese funktion:void TestFunk(SOCKET s)
{
.
.
.
send(s, Ausgabe, strlen(Ausgabe),0);
}
die ich in einem thread laufen lassen will. wie genau funktioniert das mit bind? werde dauraus nicht so ganz schlau.
so etwa?
boost::thread t1(&bind(TestFunk,s));
bitte noch etwas mehr hilfe
-
Also so müsste es eigentlich funktionieren:
boost::thread t1(boost::bind(TestFunk, s));Du mußt das & weg lassen! Und haste bind auch aus dem boost-Namespace benutzt? Bzw. using namespace boost?
-
hab jetzt erstma boost neu inst. mit meiner version vc7
welche .hpp muss ich nehmen, und woher weiß ich das, dass nächste mal?
hab die mal ausprobiert:
#include <boost/bind/bind_mf_cc.hpp> -- error c2653: '_bi' :keine klasse oder namespace.
#include <boost/bind/bind_template.hpp> -- error c2899: der typname kann nicht ausserhalb einer vorlagendeklaration verwendet werden.
#include <boost/bind/bind_cc.hpp> --- errorc2653...using namespace boost; hab ich auch drin
-
Steht auf der Doku von bind ganz oben rechts, welche Header man nehmen muß!
#include <boost/bind.hpp>Immer boost als Verzeichnis, und dann meistens immer der Klassenname plus .hpp. Selten das es anders ist, aber das steht dann auch extra in der Doku drin. Weiterhin findet man es auch in den detailierteren Informationen der Doku:
-
ups...größer hätte es fast garnicht da stehen können.
funktioniert jetzt alles wunderbar
jetzt wo das problem vom tisch ist werd ich mich erstmal ausführlicher mit boost beschaftigen.
vielen dank artchi!!!