我可以用std :: chrono :: high_resolution_clock替换SDL_GetTicks吗?

时间:2012-12-27 13:59:38

标签: c++ c++11 sdl

从C ++中检查新内容,我找到了std :: chrono库。

我想知道std :: chrono :: high_resolution_clock是否可以替代SDL_GetTicks?

2 个答案:

答案 0 :(得分:10)

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?

VS

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';

答案 1 :(得分:2)

SDL_GetTicks返回毫秒,因此完全可以使用std :: chrono,但请注意必要的单位转换。它可能不像SDL_GetTicks那么简单。此外,起点也不尽相同。