ループがあり、ループごとに (ほぼ) 一定の時間実行されるようにしたいと考えています。
私はsleep_for
この動作を実現するために を使用していますが、標準のスレッド ライブラリを完全にサポートしていない環境でもプログラムをコンパイルできるようにしたいと考えています。今、私はこのようなものを持っています:
using namespace std;
using namespace std::chrono;
//
while( !quit )
{
steady_clock::time_point then = steady_clock::now();
//...do loop stuff
steady_clock::time_point now = steady_clock::now();
#ifdef NOTHREADS
// version for systems without thread support
while( duration_cast< microseconds >( now - then ).count() < 10000 )
{
now = steady_clock::now();
}
#else
this_thread::sleep_for( microseconds{ 10000 - duration_cast<microseconds>( now - then ).count() } );
#endif
}
これにより、標準スレッドをサポートしない環境でプログラムをコンパイルできますが、プログラムは時間条件が true になるまで待機するのではなく、継続的にチェックするため、CPU を非常に集中的に使用します。
私の質問は次のとおりです。スレッドを完全にサポートしていない環境で標準 C++ のみを使用して (つまり、boost でなく)、この「待機」動作を有効にするリソース集約型の方法はありますか?