相关疑难解决方法(0)

std :: this_thread :: sleep_for()和GCC

当我尝试编译这个简单的程序时:

#include<thread>

void f() {
  std::this_thread::sleep_for(std::chrono::seconds(3));
}

int main() {
  std::thread t(f);
  t.join();
}
Run Code Online (Sandbox Code Playgroud)

在Ubuntu 10.04(32位)上使用gcc版本4.4.3:

$ g++ -std=c++0x -pthread a.cpp -o a
Run Code Online (Sandbox Code Playgroud)

我明白了:

error: ‘sleep_for’ is not a member of ‘std::this_thread’
Run Code Online (Sandbox Code Playgroud)

我看着标题'线程'.
sleep_for()受_GLIBCXX_USE_NANOSLEEP保护

#ifdef _GLIBCXX_USE_NANOSLEEP
...
/// sleep_for
template<typename _Rep, typename _Period>
  inline void
  sleep_for(const chrono::duration<_Rep, _Period>& __rtime)
...
Run Code Online (Sandbox Code Playgroud)

为什么_GLIBCXX_USE_NANOSLEEP没有定义?
如何编译这个例子?


2012年9月17日更新(jogojapan):今天我使用GCC 4.7.1遇到了同样的问题.我想知道是否有关于如何避免它的消息,除了定义_GLIBCXX_USE_NANOSLEEP.我尝试过使用-std=gnu11,但无济于事.

GCC 4.4还有一个旧的未解决的错误报告:https://bugs.launchpad.net/ubuntu/+source/gcc-4.4/+bug/608145


2012年10月19日更新(jogojapan):现在,Jonathan Wakely已经解决并解决了这个问题,作为这个问题的答案:_GLIBCXX_USE_NANOSLEEP到底是什么? 这对于自己构建GCC而不是使用现成包的任何人来说尤为重要.

c++ concurrency g++ c++11

37
推荐指数
2
解决办法
3万
查看次数

使用Win32线程模型时,MinGW-w64是否支持std :: thread开箱即用?

我在安装MinGW-w64工具链时选择了Win32线程模型,在阅读它之后提供了比POSIX更好的性能.我自己没有资格对此声明进行基准测试,但这里有一个来源.

起初我认为这个选项只会影响GCC运行时的内部工作,同时不会阻止我在我的代码中使用C++ 11线程,基于这个答案和其他用户rubenvb的评论. 但是,情况似乎并非如此.在MinGW-w64安装中似乎不存在支持.
std::thread

我从命令行调用g ++而没有其他选项-std=c++11.

此时我不确定是否:

  • rubenvb是错误的,实际上有必要在POSIX线程模型下安装MinGW-w64,以便编译依赖于C++ 11 thread库的代码,或者;
  • 我完全误解了这一切,或者;
  • std::thread 在我的场景中实际上是支持的,它只是不直观.

我强化了标题中的"开箱即用"部分.存在一个名为mingw-std-threads的库,如本答案中所示.但是,作为第三方选项,它与此问题无关.

那么,截至今天(2016年5月)std::thread,当与Win32内部线程模型一起安装时,MinGW-w64是否支持依赖代码?

c++ multithreading gcc mingw-w64 c++11

24
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×2

c++11 ×2

concurrency ×1

g++ ×1

gcc ×1

mingw-w64 ×1

multithreading ×1