【问题标题】:'yield' is not a member of 'std::this_thread''yield' 不是 'std::this_thread' 的成员
【发布时间】:2012-02-26 17:48:25
【问题描述】:
我试图让出当前线程:
std::this_thread::yield();
但不幸的是,GCC 知道得更好:
'yield' 不是 'std::this_thread' 的成员
我是否忘记了一些类似于 D_GLIBCXX_USE_NANOSLEEP 的 hack,还是什么?
【问题讨论】:
标签:
c++
multithreading
gcc
c++11
【解决方案1】:
是的,这似乎是一个类似于_GLIBCXX_USE_NANOSLEEP 的问题。 GCC 根据宏 _GLIBCXX_USE_SCHED_YIELD 有条件地编译了 yield。如果你定义它应该编译。
这将从 GCC 4.8 开始修复。
【解决方案2】:
在配置 gcc 以启用 sched_yield 检测时,您可能需要使用“--enable-libstdcxx-time”。出于某种原因,对多个功能进行了一次检查
【解决方案3】:
您不应在代码中定义 _GLIBCXX_USE_NANOSLEEP 或 _GLIBCXX_USE_SCHED_YIELD。它们是 GCC/libstdc++ 内部宏,所以应该定义它。如果没有定义它们,那是因为 GCC 没有配置检查功能可用性的选项。由于为您正在使用的任何系统启用该选项显然没有缺点,因此您可以询问提供您的 GCC 的任何人这样做。在此之前,比在代码中启用宏更安全的方法是修改系统上的 c++config.h 文件以定义宏。