如何从一个调用的函数,其执行在TBB另一个线程得到的返回值?(How to get return v

2019-09-24 01:56发布

在代码:

    #include <tbb/tbb.h>

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

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

这里GetSomething()被称为在通过其指针的另一个线程。 但是,我们可以从返回值GetSomething() 怎么样?

Answer 1:

如果你一定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();

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



Answer 2:

您可以参考使用通行证摆脱线程值

#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


文章来源: How to get return value from a function called which executes in another thread in TBB?