如何从在TBB中的另一个线程中执行的函数中获取返回值?

时间:2012-10-13 09:33:41

标签: c++ multithreading return-value function-pointers tbb

在代码中:

    #include <tbb/tbb.h>

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

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

此处GetSomething()通过其指针在另一个线程中调用。但我们可以从GetSomething()获得回报价值吗?怎么样?

2 个答案:

答案 0 :(得分:4)

您可以使用pass by reference从线程

获取值
#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

答案 1 :(得分:4)

如果你绑定了C ++ 03和tbb,你必须使用Outputarguments,这意味着你必须重写你的函数。

e.g:

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

简化任务

e.g:

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

....

// later

int result = fut.get();

在这里你不必重写任何东西。