10

Boost.Threadsは初めてで、関数の引数を関数に渡す方法を理解しようとしてい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

私は何を間違っていますか?

4

2 に答える 2