Как получить возвращаемое значение от вызываемой функции, которая выполняется в другом потоке в TBB?

В коде:

    #include <tbb/tbb.h>

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

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

Вот GetSomething() был вызван в другом потоке через указатель. Но можем ли мы получить возвращаемое значение из GetSomething()? Как?

4

Решение

Если вы связаны 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();

Здесь вам не нужно ничего переписывать.

4

Другие решения

Вы можете использовать передачу по ссылке, чтобы получить значение из потока

#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
4

По вопросам рекламы [email protected]