Boost Fragen
-
Hallo,
ich beschäftige mich jetzt mit Boost, da es ja inzwischen schon einen recht großen Bekanntheitsgrad erlangt hat. Ich habe aber einige Probleme. Zum Beispiel scheint sowas nicht möglich zu sein:
void bla() { while (true) { // ... } } int main() { boost:thread... thread.join(&bla); while (true) { // ... } }Ich würde gerne in meiner main einen Thread mit einer Endlosschleife starten und anschließend in der main weitermachen. Ist das nicht möglich?
Ein anderes Problem: Wie kann ich mit boost::asio mehrere Verbindungen aufnehmen? Es ist ja schön, dass dort ein daytime Server und allen möglichen Zeugs beschrieben wird, es aber leider keinen Hinweise gibt, wie ich einen Server programmieren kann, der mehrere Verbindungen aufnehmen kann. Ich hatte erst die Idee es so zu versuchen: boost::socket blub(io) [MAX_CLIENTS];
Aber das scheint der falsche Weg zu sein...
Würde mich über Hilfe sehr freuen.
Viele Grüße,
BoostNeuling
-
BoostNeuling schrieb:
Ich würde gerne in meiner main einen Thread mit einer Endlosschleife starten und anschließend in der main weitermachen. Ist das nicht möglich?
Natürlich. du solltest dich erst mal allgemein mit Threads beschäftigen und verstehen, was das alles ist, vor du jetzt mit boost solange rumprobierst bis es geht.
-
Natürlich ist das möglich, hab vorher dein "nicht" überlesen.
-
Lösungskugel schrieb:
Natürlich ist das möglich, hab vorher dein "nicht" überlesen.
Wenn ich join() aufrufe blockiert das Programm => In der main() gehts nicht weiter bis der Thread zu Ende ist, da es sich aber um eine Endlosschleife handelt wird das wohl eine längere Angelegenheit

-
So sollte das gehen:
#include <boost/thread.hpp> void bla() { for(;;) { // ... irgendwie sollte irgendwann diese Schleife abbrechen } } int main() { boost::thread thread_( &bla ); // hier startet der Thread for(;;) { // ... das läuft 'parallel' } thread_.join(); // wartet auf das Ende von 'thread_' return 0; }Gruß
Werner
-
Werner Salomon schrieb:
So sollte das gehen:
#include <boost/thread.hpp> void bla() { for(;;) { // ... irgendwie sollte irgendwann diese Schleife abbrechen } } int main() { boost::thread thread_( &bla ); // hier startet der Thread for(;;) { // ... das läuft 'parallel' } thread_.join(); // wartet auf das Ende von 'thread_' return 0; }Gruß
WernerVielen Dank! So klappt es perfekt
Jetzt bleibt nur noch die Frage zu asio offen 
Viele Grüße,
BoostNeuling
-
BoostNeuling schrieb:
Ein anderes Problem: Wie kann ich mit boost::asio mehrere Verbindungen aufnehmen? Es ist ja schön, dass dort ein daytime Server und allen möglichen Zeugs beschrieben wird, es aber leider keinen Hinweise gibt, wie ich einen Server programmieren kann, der mehrere Verbindungen aufnehmen kann.
Es hat doch Beispiele von Servern, zum Beispiel ein Chatserver:
http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/example/chat/chat_server.cppZudem hat es mehrere HTTP Server:
http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/examples.htmlDu musst einfach immer nur mit einem
acceptorund einem freiensocketauf ankommende Verbindungen warten. Sobald eine ankommt, schickst du dassocketweiter, für weiteren Empfang und Sendungen und lauschst wieder mit demacceptor. Ganz normal, wie man es aus jedem Socket-Tutorial auch kennt.
Das wäre allerdings vielleicht noch anzumerken. Die Boost Dokumentation ist kein wirkliches Tutorial. Wenn du also Socket (Netzwerk) Programmierung lernen willst, solltest du dich vielleicht zuerst nach anderen Tutorials oder Bücher umschauen. Die Boost Dokumentation setzt also meisten ein gewisses Grundwissen voraus.Grüssli