s********u 发帖数: 1109 | 1 就是用condition_variable的时候,wait函数有一个参数是predicate,一般就是传一
个bool函数进去。
但我用gcc 4.8.1试了下这几种都不行(设计blocking queue):
_cond.wait(locker, [](){ return !_queue.empty() } );
_cond.wait(locker, []{ return !_queue.empty() } );
bool notEmpty(){return !_queue.empty() ;}
_cond.wait(locker, notEmpty);
错误是: 'this' was not captured for this lambda function
编译器问题?
顺便问下就是这种写法等效么:
while(_queue.empty())
_cond.wait(locker);
要是等效就不费事了。 | t****t 发帖数: 6806 | 2 这不是说得很清楚了么, "this" is not captured. 所以你需要capture "this":
...locker, [this](){ return !_queue.empty(); });
【在 s********u 的大作中提到】 : 就是用condition_variable的时候,wait函数有一个参数是predicate,一般就是传一 : 个bool函数进去。 : 但我用gcc 4.8.1试了下这几种都不行(设计blocking queue): : _cond.wait(locker, [](){ return !_queue.empty() } ); : _cond.wait(locker, []{ return !_queue.empty() } ); : bool notEmpty(){return !_queue.empty() ;} : _cond.wait(locker, notEmpty); : 错误是: 'this' was not captured for this lambda function : 编译器问题? : 顺便问下就是这种写法等效么:
| s********u 发帖数: 1109 | 3 非常感谢,解决了!但我看很多教程上面都是不写这一项的,或者写"=" "&"之类,所
以不太清楚这一项到底是什么含义呢
【在 t****t 的大作中提到】 : 这不是说得很清楚了么, "this" is not captured. 所以你需要capture "this": : ...locker, [this](){ return !_queue.empty(); });
| J****3 发帖数: 427 | | t****t 发帖数: 6806 | 5 就是你这个lambda function里能看到多少外面的东西. =就是全部的value, &就是全部
的引用, 等等
【在 s********u 的大作中提到】 : 非常感谢,解决了!但我看很多教程上面都是不写这一项的,或者写"=" "&"之类,所 : 以不太清楚这一项到底是什么含义呢
| s***e 发帖数: 403 | 6 =是上下文默认按照值来capture
&是上下文默认按照引用来capture
如果你有上下文不想默认capture的,可以[=, &a, &b]这样的来声明。 | s***e 发帖数: 403 | | s********u 发帖数: 1109 | 8 非常感谢!
【在 s***e 的大作中提到】 : =是上下文默认按照值来capture : &是上下文默认按照引用来capture : 如果你有上下文不想默认capture的,可以[=, &a, &b]这样的来声明。
|
|