2012-02-04 18 views
9

Ho cercato di produrre thread corrente:'resa' non è un membro di 'std :: this_thread'

std :: this_thread :: yield();

Ma purtroppo GCC conosce meglio:

'resa' non è un membro di 'std :: this_thread'

ho dimenticato su alcuni incidere simile a D_GLIBCXX_USE_NANOSLEEP, o cosa ?

+1

Potresti aggiungere un programma minimale che pensi possa funzionare? – Mankarse

risposta

13

Sì, questo sembra essere un problema simile a quello con _GLIBCXX_USE_NANOSLEEP. GCC ha yield compilato condizionalmente in base alla macro _GLIBCXX_USE_SCHED_YIELD. Dovrebbe essere compilato se lo definisci.

Questo sarà risolto a partire da GCC 4.8.

7

Non si dovrebbe definire _GLIBCXX_USE_NANOSLEEP o _GLIBCXX_USE_SCHED_YIELD nel codice. Sono GCC/libstdC++ - macro interne, quindi è quello che dovrebbe definirlo. Se non sono definiti, è perché GCC non è stato configurato con l'opzione per verificare la disponibilità delle funzioni. Poiché non ci sono apparentemente aspetti negativi nell'abilitare quell'opzione per qualunque sistema tu stia usando, potresti chiedere a chiunque fornisca il tuo GCC di farlo. Finché non è stato fatto, un attacco più sicuro che abilitare la macro nel codice è modificare il file c++config.h sul sistema per definire i macro.

1

Potrebbe essere necessario usare '-libstdcxx-time --enable' durante la configurazione di gcc abilitare il rilevamento di sched_yield. Per qualche ragione, c'è un singolo assegno per più funzionalità

Problemi correlati