我不确定这是VS 2010问题还是我完全误解了。我通过需要修改局部变量的lambda函数创建了一个增强线程:
auto oCurrTime( boost::posix_time::microsec_clock::universal_time() );
auto spRequestSequenceThread = make_unique<boost::thread>( [&oCurrTime, this]()
{
while ( !checkAgainstSpecificTime(oCurrTime) )
{
...
}
:
:
}
在创建线程之前,oCurrTime类似于2864273654234872634,但是在线程内该值会丢失,而oCurrTime立即类似于487465847564875465,使while循环(其中计算与某个特定时间的时差)变得无用。
非常感谢您的帮助。
附言:以上代码是类功能的一部分
最佳答案
看起来您是从类方法执行线程的-在lambda捕获列表中提供了this
。这也意味着oCurrTime
是局部变量,因此如果您通过引用捕获它:您使用&
,那么当您的线程执行时,oCurrTime
将被从堆栈中删除,因为定义它的作用域已经结束。
解决方案是,如果可能的话,按值传递oCurrTime
(删除&
),或者在方法结束之前加入线程(如果可能)。您也可以使oCurrTime
为类变量。