2022年9月6日火曜日

MinGW C++でstd::this_thread::sleep_forが使いたい

備忘録
Windowsでも動くC++プログラムが使いたくて、Mingwで開発をしていたが、 C++11規格で追加されたstd::this_threadが使えなくて困ったので対策を示す。 

結論
コンパイラとして「x86_64-mingw32-g++-posix」を使おう。 

困ったこと
コンパイラに「x86_64-mingw32-g++」を指定して次のプログラムをコンパイルできなかった。 

#include <chrono>
#include <thread>
// 中略
void foo()  {
using namespace std::chrono_literals;
  std::this_thread::sleep_for(2000ms);
  std::this_thread::sleep_for(std::chrono::seconds(2));
}

コンパイルするとエラーとなる
src/xxx.cc: 47:14: error: 'std::this_thread' has not been declared

私が使いたいのは64ビット向けMingwだが、win32とposixという2種類のバリエーションが有り、「x86_64-mingw32-g++」を指定すると「x86_64-mingw32-g++-win32」扱いとなり、「x86_64-mingw32-g++-win32」ではstd::this_threadが使えないということのようである。