![](/img/trans.png)
[英]How to set epoch for std::chrono::steady_clock in C++?
[英]How to format steady_clock time into HH:MM:SS.Milliseconds using <chrono>from c++ stdl?
我目前正在為我的 C++ 編程 class 制作一個小游戲,教授要求我們為游戲設置一個計時器。 我們根本沒有討論過如何使用計時器和任何標准計時器庫,所以我們只能靠自己了。 我找到了 std 庫,並嘗試為游戲實現一個簡單的計時器並設法做到了,但我似乎無法弄清楚如何將時間從它格式化為更用戶友好的版本,如 HH:MM:SS .毫秒。 我所擁有的只是從開始穩定時鍾到結束它的原始時間,我可以以秒、毫秒、分鍾等為單位顯示它,但這看起來不像我想要的那么好。 我找到了一些解決方案,但它們對我來說太難了,甚至無法解構並嘗試應用。 有什么簡單的方法可以做我想做的事嗎? 我實現計時器的部分代碼:
// Initialize game timer using <chrono>
chrono::steady_clock::time_point start = chrono::steady_clock::now();
// While game is running (player alive and enemy robot lefts) update map
while (!GameEnd){
show_maze(maze_map);
cout << endl;
playerMove(x, y, GameEnd, died, maze_map);
}
// Terminate game timer and calculate time elapsed
chrono::steady_clock::time_point end = chrono::steady_clock::now();
chrono::steady_clock::duration time_elapsed = end - start;
// Show last map state before either player died or no more robots left
show_maze(maze_map);
// Boo / congratulate player for his performance on the game
cout << "Game Over! You " << (died ? "died by hitting a fence/robot :(" : "won because all the robots died. Congratulations!") << endl;
cout << "Your game lasted for " << chrono::duration_cast<chrono::milliseconds>(time_elapsed).count() << " milliseconds.\n\n";
您可以通過以下方式獲取time_elapsed
的小時數:
auto h = chrono::duration_cast<chrono::hours>(time_elapsed);
然后您可以減去小時數,以便time_elapsed
僅保留少於一小時的持續時間:
time_elapsed -= h;
然后你可以得到time_elapsed
的分鍾數:
auto m = chrono::duration_cast<chrono::minutes>(time_elapsed);
並減去分鍾...
time_elapsed -= m;
現在time_elapsed
的持續時間不到一分鍾。 您可以繼續使用此模式,直至達到您想要的任何粒度。
C++20 有一種稱為std::chrono::hh_mm_ss
的類型,它為了方便而精確地執行此操作:
chrono::hh_mm_ss hms{time_elapsed};
hh_mm_ss
有hours()
、 minutes()
、 seconds()
和subseconds()
getter,它們返回各自的計時單位。 據我所知,目前還沒有供應商提供此功能,但您可以在此處預覽 C++20 的這一部分,它與 C++11/14/17 一起使用。
#include "date/date.h"
#include <chrono>
#include <iostream>
int
main()
{
using namespace std;
chrono::steady_clock::time_point start = chrono::steady_clock::now();
// ...
chrono::steady_clock::time_point end = chrono::steady_clock::now();
chrono::steady_clock::duration time_elapsed = end - start;
cout << date::hh_mm_ss{chrono::duration_cast<chrono::milliseconds>(time_elapsed)} << '\n';
}
Output:
00:00:00.000
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.