如何使用boost.lambda和boost.thread来获取线程的返回值?

时间:2011-05-11 22:20:53

标签: c++ multithreading boost lambda

我正在尝试做这样的事情:

using namespace boost::lambda;
using boost::thread;

int add(int a, int b) {return a+b;}

int sum, x=2, y=6;
thread adder(var(sum) = add(_1, _2), x, y);
adder.join();
cout << sum;

我收到编译错误:

  

无法将参数1从'boost :: arg'转换为'int'

1 个答案:

答案 0 :(得分:5)

你真的很亲密!问题是你直接使用Lambda的占位符调用add() - 它不会在lambda中懒惰地进行评估,而是立即进行。

这是一个固定版本:

using namespace boost::lambda;
using boost::thread;

int sum, x=2, y=6;
thread adder(var(sum) = _1 + _2, x, y);
adder.join();
cout << sum;

如果你真的想使用add功能,你可以使用bind

using namespace boost::lambda;
using boost::thread;

int add(int a, int b) {return a+b;}

int sum, x=2, y=6;
thread adder(var(sum) = bind(add, _1, _2), x, y);
adder.join();
cout << sum;