在 _USE_32BIT_TIME_T 上使用 C++11 的计时
Using chrono of C++11 with _USE_32BIT_TIME_T on
我正在从事的项目要求我使用 _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\n";
我收到以下警告。它编译但不按预期工作。它通常不会从 wait_for return,或者如果它等待任意时间。
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\chrono(749): warning C4244: '=' : conversion from '__int64' to 'time_t', possible loss of data
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\condition_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
有没有办法在启用 _USE_32BIT_TIME_T
的情况下使用 chrono
?
显然 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
我正在从事的项目要求我使用 _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\n";
我收到以下警告。它编译但不按预期工作。它通常不会从 wait_for return,或者如果它等待任意时间。
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\chrono(749): warning C4244: '=' : conversion from '__int64' to 'time_t', possible loss of data
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\condition_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
有没有办法在启用 _USE_32BIT_TIME_T
的情况下使用 chrono
?
显然 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