从C ++中检查新内容,我找到了std :: chrono库。
我想知道std :: chrono :: high_resolution_clock是否可以替代SDL_GetTicks?
答案 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那么简单。此外,起点也不尽相同。