6

检查来自 C++ 的新东西,我找到了 std::chrono 库。

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

4

2 回答 2

11

使用 with 的优点std::chrono::high_resolution_clock是避免将时间点和持续时间存储在Uint32. 该std::chrono库附带了各种各样的std::chrono::durations,您应该使用它们。这将使代码更具可读性,并且不那么模棱两可:

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 回答