我不确定这是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为类变量。

09-05 06:40