在代码中:
#include <tbb/tbb.h>
int GetSomething()
{
int something;
// do something
return something;
}
// ...
tbb::tbb_thread(GetSomething, NULL);
// ...
此处GetSomething()
通过其指针在另一个线程中调用。但我们可以从GetSomething()
获得回报价值吗?怎么样?
答案 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();
在这里你不必重写任何东西。