我试图产生当前线程:
的std :: this_thread ::收率();
但不幸的是GCC知道的更好:
'yield'不是'std :: this_thread'
的成员
我是否忘记了类似于D_GLIBCXX_USE_NANOSLEEP的黑客攻击,或者是什么?
答案 0 :(得分:13)
是的,这似乎是与_GLIBCXX_USE_NANOSLEEP
类似的问题。 GCC根据宏yield
有条件地编译_GLIBCXX_USE_SCHED_YIELD
。如果你定义它,它应该编译。
这将从GCC 4.8开始修复。
答案 1 :(得分:7)
您不应在代码中定义_GLIBCXX_USE_NANOSLEEP
或_GLIBCXX_USE_SCHED_YIELD
。它们是GCC / libstdc ++ - 内部宏,所以应该定义它。如果没有定义它们,那是因为GCC没有配置检查功能可用性的选项。因为对于你正在使用的任何系统来说,启用该选项显然没有任何缺点,你可以问任何提供你的GCC的人这样做。在此之前,比在代码中启用宏更安全的方法是修改系统上的c++config.h
文件以定义宏。
答案 2 :(得分:1)
配置gcc以启用sched_yield检测时,可能需要使用'--enable-libstdcxx-time'。出于某种原因,只需检查多个功能