4

コード内:

    #include <tbb/tbb.h>

    int GetSomething()
    {
        int something;
        // do something
        return something;
    }

    // ...
    tbb::tbb_thread(GetSomething, NULL);
    // ...

GetSomething()これは、別のスレッドでそのポインターを介して呼び出されました。しかし、から戻り値を取得できますGetSomething()か?どのように?

4

2 に答える 2

4

参照渡しを使用して、スレッドから値を取得できます

#include <tbb/tbb.h>

void GetSomething(int *result)
{

    result= // do something
}

// ...
int result;
tbb::tbb_thread(GetSomething, &result);
tbb.join();
//use result as you like
于 2012-10-13T09:44:07.417 に答える
4

C ++ 03とtbbにバインドされている場合は、Outputargumentsを使用する必要があります。つまり、関数を書き直す必要があります。

例えば:

void GetSomething(int* out_ptr);

int var = 23;

tbb::tbb:thread(GetSomething, &var); // pay attention that this doesn't run of scope

またはboost::refあなたとこれを行うことができます:

void GetSomething(int& out);

int var = 23;
tbb::tbb_thread(GetSomething, boost::ref(var)); // pay attention here, too

C ++ 11を使用できる場合は、次を使用してタスクを簡略化しfuturesます。

例えば:

std::future<int> fut = std::async(std::launch::async, GetSomething);

....

// later

int result = fut.get();

ここでは何も書き直す必要はありません。

于 2012-10-13T09:44:19.050 に答える