【问题标题】:'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 文件以定义宏。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-29
        • 1970-01-01
        • 1970-01-01
        • 2015-02-13
        • 1970-01-01
        • 2013-10-07
        • 1970-01-01
        相关资源
        最近更新 更多