检查来自 C++ 的新东西,我找到了 std::chrono 库。
我想知道 std::chrono::high_resolution_clock 是否可以很好地替代 SDL_GetTicks?
使用 with 的优点std::chrono::high_resolution_clock
是避免将时间点和持续时间存储在Uint32
. 该std::chrono
库附带了各种各样的std::chrono::duration
s,您应该使用它们。这将使代码更具可读性,并且不那么模棱两可:
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';
SDL_GetTicks 返回毫秒,因此完全可以使用 std::chrono 代替,但请注意必要的单位转换。它可能不像 SDL_GetTicks 那样简单。而且,起点也不一样。