‘sleep_for’ is not a member of ‘std::this_thread’

在嵌入式开发中可能遇到这个问题。

 

解决方法:

加上_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
      inline void
      sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
      {
	chrono::seconds __s =
	  chrono::duration_cast(__rtime);

	chrono::nanoseconds __ns =
	  chrono::duration_cast(__rtime - __s);

	__gthread_time_t __ts =
	  {
	    static_cast(__s.count()),
	    static_cast(__ns.count())
	  };

	::nanosleep(&__ts, 0);
      }

    /// sleep_until
    template
      inline void
      sleep_until(const chrono::time_point<_Clock, _Duration>& __atime)
      { sleep_for(__atime - _Clock::now()); }
#endif

 

 

 

 

参考:https://github.com/PurpleI2P/i2pd/issues/299

你可能感兴趣的:(c++,linux,sleep_for)