6

C++ からの新しいものをチェックすると、 std::chrono ライブラリが見つかりました。

std::chrono::high_resolution_clock が SDL_GetTicks の代わりになるかどうか疑問に思っていますか?

4

2 に答える 2

11

を使用する利点はstd::chrono::high_resolution_clock、時点と期間を に保存しないようにすることですUint32。ライブラリには、代わりに使用する必要があるstd::chronoさまざまな が付属しています。std::chrono::durationこれにより、コードが読みやすくなり、あいまいさがなくなります。

Uint32 t0 = SDL_GetTicks();
// ...
Uint32 t1 = SDL_GetTicks();
// ...
// Is t1 a time point or time duration?
Uint32 d = t1 -t0;
// What units does d have?

対:

using namespace std::chrono;
typedef high_resolution_clock Clock;
Clock::time_point t0 = Clock::now();
// ...
Clock::time_point t1 = Clock::now();
// ...
// Is t1 has type time_point.  It can't be mistaken for a time duration.
milliseconds d = t1 - t0;
// d has type milliseconds

ある時点と期間を保持するための型付きシステムには、Uint32. Int64代わりにに保存される可能性があることを除いて。ただし、本当に必要な場合はカスタマイズできます。

typedef duration<Uint32, milli> my_millisecond;

の精度は次の方法で検査できますhigh_resolution_clock

cout << high_resolution_clock::period::num << '/' 
     << high_resolution_clock::period::den << '\n';
于 2012-12-27T16:30:36.177 に答える
2

SDL_GetTicks はミリ秒を返すので、代わりに std::chrono を使用することは完全に可能ですが、必要な単位変換に注意してください。SDL_GetTicks ほど単純ではないかもしれません。また、出発点は同じではありません。

于 2012-12-27T14:04:39.527 に答える