5

ドキュメントに基づく次の大まかなコードは、boost で提供されるタイマー オブジェクトからの経過時間を秒単位で示します。

boost::timer::cpu_timer timer;
// ...do some work...
const boost::timer::nanosecond_type oneSecond(1000000000LL);
return timer.elapsed().user / oneSecond;

この方法の問題点は、コードにこの不快なマジック ナンバーがあることです。ブースト内に、このマジック ナンバーをコードに入れずに、このマジック ナンバーを使用せずに、このマジック ナンバーを使用せずに、このマジック ナンバーをコードに含めずに、この'nanosecond_type'の呼び出しからの呼び出しから利用可能な値から経過秒数を取得できる方法はありますか。

(編集:)結論:

受け入れられた回答に基づいて、本番コードで次のスニペットになりました。

boost::timer::cpu_timer timer;
// ...do some work...
auto nanoseconds = boost::chrono::nanoseconds(timer.elapsed().user + timer.elapsed().system);
auto seconds = boost::chrono::duration_cast<boost::chrono::seconds>(nanoseconds);
std::cout << seconds.count() << std::endl;
4

3 に答える 3

9

@jogojapan が示唆したように、boost::chronoは良い選択です。doubleただし、基になる型として使用する場合は、duration_cast<> は必要ありません。

typedef boost::chrono::duration<double> sec; // seconds, stored with a double
sec seconds = boost::chrono::nanoseconds(timer.elapsed().user);
std::cout << seconds.count() << "s\n"; // gives the number of seconds, as double.
于 2013-06-26T12:29:42.780 に答える
0

ソフトランの各ハードウェアでナノ秒あたりのティック数を測定する必要があります..見てみましょう( C++を使用してナノ秒単位で時間を提供するタイマー関数

于 2013-06-26T05:36:42.327 に答える