在代码:
#include <tbb/tbb.h>
int GetSomething()
{
int something;
// do something
return something;
}
// ...
tbb::tbb_thread(GetSomething, NULL);
// ...
这里GetSomething()
被称为在通过其指针的另一个线程。 但是,我们可以从返回值GetSomething()
怎么样?
如果你一定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();
在这里,您不必重写任何东西。
您可以参考使用通行证摆脱线程值
#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?