【发布时间】:2016-04-15 07:49:30
【问题描述】:
我不确定这是 VS 2010 的问题还是我完全误解了某些东西。我正在通过需要修改局部变量的 lambda 函数创建一个 boost 线程:
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 循环(其中计算与某个特定时间的时间差)无用。
非常感谢您的帮助。
P.S.:以上代码是类函数的一部分
【问题讨论】:
-
你的主线程在启动这个 lambda 线程后做了什么?你确定
oCurrTime不会消失,和/或被主线程同时访问吗? -
并发使用绝对不是这样。但我认为你对存在的事情是正确的,因为函数可能在线程结束之前返回。我没有考虑这一点,将立即检查...
标签: c++ variables lambda local capture