Quando provo a compilare questo semplice programma:std :: :: this_thread sleep_for() e GCC
#include<thread>
void f() {
std::this_thread::sleep_for(std::chrono::seconds(3));
}
int main() {
std::thread t(f);
t.join();
}
con gcc version 4.4.3 su Ubuntu 10.04 (32 bit):
$ g++ -std=c++0x -pthread a.cpp -o a
Ottengo:
error: ‘sleep_for’ is not a member of ‘std::this_thread’
Ho cercato nell'intestazione 'thread'.
sleep_for() è protetto con _GLIBCXX_USE_NANOSLEEP
#ifdef _GLIBCXX_USE_NANOSLEEP
...
/// sleep_for
template<typename _Rep, typename _Period>
inline void
sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
...
Perché _GLIBCXX_USE_NANOSLEEP
non definiti?
Come posso ottenere questo esempio da compilare?
Aggiornamento 17 set 2012 (jogojapan): Mi sono imbattuto in questo stesso problema di oggi, utilizzando GCC 4.7.1. Mi chiedo se ci sono notizie su come evitarlo, oltre a definire _GLIBCXX_USE_NANOSLEEP
. Ho provato a utilizzare -std=gnu11
, ma senza successo.
C'è anche un vecchio, segnalazione di bug irrisolti per GCC 4.4: https://bugs.launchpad.net/ubuntu/+source/gcc-4.4/+bug/608145
Aggiornamento 19 ottobre 2012 (jogojapan): Il problema è stato spiegato e risolto da Jonathan Wakely come un Anwer a questa domanda: What is _GLIBCXX_USE_NANOSLEEP all about? Questo è particolarmente rilevante per chiunque costruisca GCC stesso invece di usare un pacchetto già pronto.
stesso problema su porte Mac OSX Mac 4.7.2 gcc con la correzione '-D_GLIBCXX_USE_NANOSLEEP' risolverlo – pyCthon