109

タイマーと期間に chrono ライブラリを使用しようとしています。

Duration frameStart;(アプリの開始から)とDuration frameDelta;(フレーム間の時間)を持つことができるようにしたい

frameDelta期間をミリ秒とフロート秒で取得できるようにする必要があります。

<chrono>新しい C++11ライブラリでこれを行うにはどうすればよいですか? 私はそれに取り組んでおり、グーグルで検索しています(情報はまばらです)。コードは非常にテンプレート化されており、特別なキャストやものが必要です。このライブラリを正しく使用する方法がわかりません。

4

4 に答える 4

176

これはあなたが探しているものですか?

#include <chrono>
#include <iostream>

int main()
{
    typedef std::chrono::high_resolution_clock Time;
    typedef std::chrono::milliseconds ms;
    typedef std::chrono::duration<float> fsec;
    auto t0 = Time::now();
    auto t1 = Time::now();
    fsec fs = t1 - t0;
    ms d = std::chrono::duration_cast<ms>(fs);
    std::cout << fs.count() << "s\n";
    std::cout << d.count() << "ms\n";
}

私にとってはこれを印刷します:

6.5e-08s
0ms
于 2013-01-18T02:33:01.893 に答える
17

「ミリ秒とフロート秒」が何を意味するのかわかりませんが、これでアイデアが得られるはずです:

#include <chrono>
#include <thread>
#include <iostream>

int main()
{
  auto then = std::chrono::system_clock::now();
  std::this_thread::sleep_for(std::chrono::seconds(1));
  auto now = std::chrono::system_clock::now();
  auto dur = now - then;
  typedef std::chrono::duration<float> float_seconds;
  auto secs = std::chrono::duration_cast<float_seconds>(dur);
  std::cout << secs.count() << '\n';
}
于 2013-01-18T02:15:38.280 に答える
10

明示的に型指定されたイニシャライザ イディオムを使用するAAA スタイル:

#include <chrono>
#include <iostream>

int main(){
  auto start = std::chrono::high_resolution_clock::now();
  // Code to time here...
  auto end = std::chrono::high_resolution_clock::now();

  auto dur = end - start;
  auto i_millis = std::chrono::duration_cast<std::chrono::milliseconds>(dur);
  auto f_secs = std::chrono::duration_cast<std::chrono::duration<float>>(dur);
  std::cout << i_millis.count() << '\n';
  std::cout << f_secs.count() << '\n';
}
于 2015-03-05T11:14:23.677 に答える