В коде:
#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