Lorsque je tente de compiler ce programme simple:std :: this_thread :: sleep_for() et GCC
#include<thread>
void f() {
std::this_thread::sleep_for(std::chrono::seconds(3));
}
int main() {
std::thread t(f);
t.join();
}
avec la version gcc 4.4.3 sur Ubuntu 10.04 (32 bits):
$ g++ -std=c++0x -pthread a.cpp -o a
Je reçois:
error: ‘sleep_for’ is not a member of ‘std::this_thread’
J'ai regardé dans l'en-tête 'thread'.
sleep_for() est protégé par _GLIBCXX_USE_NANOSLEEP
#ifdef _GLIBCXX_USE_NANOSLEEP
...
/// sleep_for
template<typename _Rep, typename _Period>
inline void
sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
...
Pourquoi _GLIBCXX_USE_NANOSLEEP
pas défini?
Comment obtenir cet exemple pour compiler?
Mise à jour le 17 septembre 2012 (jogojapan): Je suis tombé sur ce même problème aujourd'hui, en utilisant GCC 4.7.1. Je me demande s'il y a des nouvelles sur la façon de l'éviter, autrement qu'en définissant _GLIBCXX_USE_NANOSLEEP
. J'ai essayé d'utiliser -std=gnu11
, mais en vain.
Il y a aussi un vieux rapport de bogue non résolu pour GCC 4.4: https://bugs.launchpad.net/ubuntu/+source/gcc-4.4/+bug/608145
Mise à jour le 19 octobre 2012 (jogojapan): La question a été expliqué et résolu par Jonathan Wakely comme anwer à cette question: What is _GLIBCXX_USE_NANOSLEEP all about? Ceci est particulièrement pertinent pour quiconque construit GCC lui-même au lieu d'utiliser un ensemble prêt à l'emploi.
même problème sur les ports mac osx mac 4.7.2 gcc avec le correctif '-D_GLIBCXX_USE_NANOSLEEP' résoudre – pyCthon