使用C ++ 11的chrono和_USE_32BIT_TIME_T

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C ++ 11的chrono和_USE_32BIT_TIME_T相关的知识,希望对你有一定的参考价值。

我正在研究的项目要求我使用_USE_32BIT_TIME_T预处理器定义。所以我无法摆脱它。我还想使用C ++ 11的chrono库进行定时等待。但是,我不能让它工作。这是我正在处理的代码。

    std::mutex *lock = new std::mutex;
    std::condition_variable *cv = new std::condition_variable;
    std::unique_lock<std::mutex> ulock(*lock);

    auto start = std::chrono::high_resolution_clock::now();
    cv->wait_for(ulock, std::chrono::milliseconds(40));
    auto finish = std::chrono::high_resolution_clock::now();
    cout << std::chrono::duration_cast<std::chrono::nanoseconds>(finish - start).count() << "ns
";

我收到以下警告。它编译但不能按预期工作。它通常不会从wait_for返回,或者它会等待任意时间。

C:Program Files (x86)Microsoft Visual Studio 12.0VCincludechrono(749): warning C4244: '=' : conversion from '__int64' to 'time_t', possible loss of data
          C:Program Files (x86)Microsoft Visual Studio 12.0VCincludecondition_variable(73) : see reference to function template instantiation 'xtime std::_To_xtime<__int64,std::milli>(const std::chrono::duration<__int64,std::milli> &)' being compiled
          Main.cpp(24) : see reference to function template instantiation 'std::_Cv_status std::condition_variable::wait_for<__int64,std::milli>(std::unique_lock<std::mutex> &,const std::chrono::duration<__int64,std::milli> &)' being compiled

有没有办法使用chrono_USE_32BIT_TIME_T

答案

显然,Visual Studio存在一个错误:http://connect.microsoft.com/VisualStudio/feedbackdetail/view/972033/std-chrono-and-use-32bit-time-t-dont-work-togther

我最终使用boost而不是标准的C ++ 11库。

另一答案

我有同样的问题。我通过将wait_for更改为wait_until,传递当前时间+您想要的任何延迟来解决这个问题

xtime xt;
xtime_get(&xt, TIME_UTC);
xt.sec += 10;
cvTimeout.wait_until(lkTimeout, &xt);

http://en.cppreference.com/w/cpp/thread/condition_variable/wait_until

以上是关于使用C ++ 11的chrono和_USE_32BIT_TIME_T的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp sw4stm32_use_semihosting

_GLIBCXX_USE_CXX11_ABI 在 RHEL6 和 RHEL7 上禁用?

GCC编译宏_GLIBCXX_USE_CXX11_ABI背景分析和实现原理

GCC编译宏_GLIBCXX_USE_CXX11_ABI背景分析和实现原理

GCC编译宏_GLIBCXX_USE_CXX11_ABI背景分析和实现原理

CUDA内在功能优势