«yield» не является членом «std :: this_thread» - PullRequest
9 голосов
/ 04 февраля 2012

Я пытался выдать текущий поток:

std :: this_thread :: yield ();

Но, к сожалению, GCC знает лучше:

'yield' не является членом 'std :: this_thread'

Я забыл о каком-то хаке, похожем на D_GLIBCXX_USE_NANOSLEEP, или что?

Ответы [ 3 ]

13 голосов
/ 04 февраля 2012

Да, это похоже на проблему с _GLIBCXX_USE_NANOSLEEP. GCC yield условно компилируется в зависимости от макроса _GLIBCXX_USE_SCHED_YIELD. Он должен скомпилироваться, если вы определите это.

Это будет исправлено с GCC 4.8.

7 голосов
/ 04 февраля 2012

Вы не должны определять _GLIBCXX_USE_NANOSLEEP или _GLIBCXX_USE_SCHED_YIELD в своем коде.Это GCC / libstdc ++ - внутренние макросы, так что это то, что должно их определять.Если они не определены, это потому, что GCC не был настроен с возможностью проверки доступности функций.Поскольку, по-видимому, нет недостатков в том, чтобы включить эту опцию для любой используемой вами системы, вы можете попросить любого, кто предоставляет ваш GCC, сделать это.Пока это не сделано, безопаснее, чем включить макрос в вашем коде, - это изменить файл c++config.h в вашей системе, чтобы определить макросы.

1 голос
/ 01 февраля 2013

Вам может понадобиться использовать '--enable-libstdcxx-time' при настройке gcc, чтобы включить обнаружение sched_yield. По какой-то причине существует одна проверка для нескольких функций

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...