|
|
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.