|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2021 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: #pragma once
8:
9: #include "header.h"
10: #include <chrono>
11:
12: // .Net の Stopwatch みたいなもの。
13: // Start() と Restart() が分かりづらいけど、もうそっくり真似しておく
14: class Stopwatch
15: {
16: using steady_clock = std::chrono::steady_clock;
17:
18: public:
19: // ストップウォッチを再開する
20: void Start() {
21: running = true;
22: epoch = Now();
23: }
24:
25: // ストップウォッチを一時停止する
26: void Stop() {
27: total += Now() - epoch;
28: running = false;
29: }
30:
31: // 経過時間をリセットした上で、ストップウォッチを再開(開始)する
32: void Restart() {
33: total = steady_clock::duration::zero();
34: Start();
35: }
36:
37: // 経過時間を nsec で返す
38: uint64 Elapsed() const {
39: using namespace std::chrono;
40: if (running) {
41: return duration_cast<nanoseconds>(Now() - epoch + total).count();
42: } else {
43: return duration_cast<nanoseconds>(total).count();
44: }
45: }
46:
47: private:
48: // 現在時刻を返す
49: steady_clock::time_point Now() const {
50: return steady_clock::now();
51: }
52:
53: // 前回までの経過時間の合計
54: steady_clock::duration total {};
55:
56: // 今回の Start 時刻
57: steady_clock::time_point epoch {};
58:
59: // ストップウォッチが動作中なら true
60: bool running {};
61: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.