- 主题:关于lambda俘获变量的生命周期的问题
如果有一函数,经常被调用,里面有一个变量,需要进行一个操作,假定这个操作是异步的,是网络方面进行回叫。
int foo(.) {
int value = 0;
var waiter=...
important_call([&waiter, &value](int update){
// when call back, will destruct waiter
value = update;
waiter.Cancel();
}
waiter.Wait(deadline);
return value;
}
那么,如果超时后,函数返回了0,然后lambda才被呼叫,这个时候waiter已经消失了,是不是?
--
修改:bihai FROM 98.42.143.*
FROM 98.42.143.*
意思是lambda被呼叫的时候,会崩溃?怎么避免呢?比如,怎么告诉lambda,不需要执行了,不需要控制waiter了。
【 在 z16166 的大作中提到: 】
: 显然吧。capture的是auto变量的引用。
--
FROM 98.42.143.*
callback里面如果不cancel, Wait就会等到超时才继续。
【 在 ble 的大作中提到: 】
: 你这都把异步转同步了,callback可以完全不需要这个waiter啊
:
--
FROM 98.42.143.*
这个waiter就是一直等着,就怕死机在那里,好在有一个超时参数可以不再等待。但是带来一个坏处,waiter变量会消失,那取消这个等待就可能是非法操作了。
【 在 ble 的大作中提到: 】
: 一般的waiter都是(等某个事件||超时),莫非你这个waiter就是单纯等固定时间?
:
--
FROM 98.42.143.*