PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hat wer Ahnung von Boost::thread?


samspade
2005-08-30, 16:40:17
Hallo

Ich bin vor kurzem auf die diese Seite http://www.kharchi.de/ gestoßen und habe dort das Beispiel über die Threads gesehen.


#include <iostream>
#include <boost/thread/thread.hpp>
using namespace std;
void function1(){ for(int i=0; i<10000; i++)
cout << "huhu: " << i << endl;}

void function2(){ for(int i=0; i<10000; i++)
cout << "lala: " << i << endl;}

int main(){boost::thread t1(&function1);
// Thread-Objekt t1 erstellen und function1() starten.
function2();
// t1 läuft gleichzeitig weiter, während function2() aufgerufen wird!}

Schön einfach dachte ich und habs gleich mal ausprobiert. Nach mehreren Anläufen hab ich es dann auch zum laufen bekommen (unter VS 2003.net). Nun wollte ich das mal in einem eigenen Programm versuchen. Nun ist das Problem, dass der Funktionaufruf anders aussieht als im Beispiel.

z.B. erg=berechnung(zahl); .

Das lässt sich ja leider nicht einfach nach dem Beispiel umsetzen, also:

boost::thread t1(&erg=... oder erg=boost..

Das funktioniert auch nicht mit irgendwelchem eingeklammere.
Also wie kann man die Funktion als thread starten (der Compiler regt sich schon auf wenn ich nur den Parameter übergebe) und das Ergebnis auch noch einer Variablen übergeben? Ohne größeren Aufwand, versteht sich. Im übrigen ist die Dokumentation hierbei nicht sehr hilfreich.

Hoffe das war jetzt irgendwie verständlich.
schon mal Danke.
Grüße
Sam

Aqualon
2005-08-30, 17:47:50
Soweit ich http://www.cuj.com/documents/s=8470/cuj0205kempf/ verstanden habe, kannst du bei boost Threads keine Parameter und Rückgabewerte übergeben. Allerdings kann man anscheinend pointer auf Objekte übergeben. Inwiefern dabei dann was ausgeführt werden kann, wurde auf der Seite aber nicht erwähnt und hab ich auch nirgends auf die Schnelle gefunden.

Vielleicht muss man erst ein Objekt erzeugen, dem alle benötigten Daten geben, dann object.method an boost::thread übergeben und nach Beendigung des Threads mit einer getMethode des Ergebnis aus dem Objekt wieder rausholen.

Aqua

Trap
2005-08-30, 21:42:36
Hast du dir die Beispiele angeguckt? Da ist unter anderem tennis.cpp dabei und da ist drin gezeigt wie man Daten übergeben kann.

samspade
2005-08-31, 17:45:58
Danke für die Hinweise, besonders Nr.2. Ich hatte nämlich bisher nur in den Doc Ordner geschaut und da ist ja nicht wirklich was hilfreiches drin. Habe jetzt male ein bisschen gestöbert, nach dem Hinweis mit tennis.cpp und bin auch fündig geworden. Aber wer kommt denn auf die Idee, dass unter libs\threads es sogar einen TutorialOrdner gibt. Merkwürdige Strukturierung.

Grüße
Sam