Ich bin neu bei Boost.Threads und versuche zu verstehen, wie Funktionsargumente an die boost::thread_groups::create_thread()
-Funktion übergeben werden. Nach dem Lesen einiger Tutorials und der Boost-Dokumentationen verstehe ich, dass es möglich ist, die Argumente einfach an diese Funktion zu übergeben, aber ich kann diese Methode nicht zum Laufen bringen. Die andere Methode, über die ich lese, ist die Verwendung von Funktoren, um die Parameter an meine Funktion zu binden, aber das würde Kopien der Argumente erzeugen, und ich verlange streng, dass konstante Referenzen übergeben werden, da die Argumente große Matrizen sind (dies habe ich vor.) tun Sie mit boost::cref(Matrix)
einmal bekomme ich dieses einfache Beispiel zu arbeiten).So übergeben Sie Funktionsparameter an boost :: thread_groups :: create_thread()
Nun lassen Sie uns auf den Code runter:
mt.cc: In function âvoid thr_main()â:
mt.cc:46: error: no matching function for call to âboost::thread_group::create_thread(void (*)(float, float), float&, float&)â
/usr/local/boost_1_44_0/include/boost/thread/detail/thread.hpp: In member function âvoid boost::detail::thread_data<F>::run() [with F = void (*)(float, float)]â:
mt.cc:55: instantiated from here
/usr/local/boost_1_44_0/include/boost/thread/detail/thread.hpp:61: error: too few arguments to function
Was ich tue, falsch:
void printPower(float b, float e)
{
cout<<b<<"\t"<<e<<"\t"<<pow(b,e)<<endl;
boost::this_thread::yield();
return;
}
void thr_main()
{
boost::progress_timer timer;
boost::thread_group threads;
for (float e=0.; e<20.; e++)
{
float b=2.;
threads.create_thread(&printPower,b,e);
}
threads.join_all();
cout << "Threads Done" << endl;
}
Dies ist nicht mit dem folgenden Fehler nicht kompilieren?
Dieser Ansatz ist für mein Problem geeignet, da ich keine Kopien der Argumente machen leisten kann. Es wird jedoch der folgende Fehler ausgegeben: '/usr/local/boost_1_44_0/include/boost/thread/detail/thread.hpp: In Member-Funktion? Leere boost :: detail :: thread_data :: run() [mit F = void (*) (float, float)] â: mt.cc:55: von hier aus instanziiert /usr/local/boost_1_44_0/include/boost/thread/detail/thread.hpp:61: Fehler: zu wenig Argumente zu Funktion " –
Mindstorm
@Mindstorm, hmm ... Code mit' add_thread' funktioniert für mich (Boost v1.53). – soon
@Mindstorm, über das Kopieren vermeiden: verwenden Sie einfach 'boost :: cref' wie Sie bereits sagten. Ich habe die Antwort aktualisiert. – soon