在嵌入式开发中可能遇到这个问题。
解决方法:
加上_GLIBCXX_USE_NANOSLEEP宏定义。
在qt的.pro文件中加上这一句
DEFINES += _GLIBCXX_USE_NANOSLEEP
在linux Makefile 中则要加上
NEEDED_CXXFLAGS += -D_GLIBCXX_USE_NANOSLEEP
原因:
在gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/arm-linux-gnueabihf/include/c++/4.7.3/thread头文件中,可以看到如下代码。
#ifdef _GLIBCXX_USE_NANOSLEEP
/// sleep_for
template<typename _Rep, typename _Period>
inline void
sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
{
chrono::seconds __s =
chrono::duration_cast<chrono::seconds>(__rtime);
chrono::nanoseconds __ns =
chrono::duration_cast<chrono::nanoseconds>(__rtime - __s);
__gthread_time_t __ts =
{
static_cast<std::time_t>(__s.count()),
static_cast<long>(__ns.count())
};
::nanosleep(&__ts, 0);
}
/// sleep_until
template<typename _Clock, typename _Duration>
inline void
sleep_until(const chrono::time_point<_Clock, _Duration>& __atime)
{ sleep_for(__atime - _Clock::now()); }
#endif