私はに新規であり、を受け取り、boost::thread_groups::create_thread()
関数に関数の引数を渡す方法を理解しようとしています。いくつかのチュートリアルと拡張ドキュメントを読んだ後、この関数に引数を渡すことは可能だが、このメソッドを動作させることはできないことを理解しています。boost :: thread_groups :: create_thread()に関数のパラメータを渡す方法
私が読んだもう1つの方法は、ファンクタを使用して関数にパラメータをバインドすることですが、引数のコピーを作成することになります。引数が大きな行列になるのでconst参照を渡す必要がありますこの簡単な例がうまくいけば、boost::cref(Matrix)
を使ってください)。
それでは、コードに降りてみましょう:
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;
}
これは、次のエラーでコンパイルできません:
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
を私が間違っているのか?
後者のアプローチは私の問題に適しています。しかし、次のエラーがスローされます: '/usr/local/boost_1_44_0/include/boost/thread/detail/thread.hpp:メンバー関数内でboost :: detail :: thread_data :: run()[F =空白(*)(float、float)]â: mt.cc:55:ここからインスタンス化 /usr/local/boost_1_44_0/include/boost/thread/detail/thread.hpp:61:エラー:引数が少なすぎる関数 ' –
Mindstorm
@Mindstorm、hmm ...' add_thread'のコードは私のために働きます(boost v1.53)。 – soon
@Mindstormについては、コピーを避けてください。既に述べたように 'boost :: cref'を使用してください。私は答えを更新しました。 – soon