MGL::System::Chrono
Contents
MGL::System::Chrono#
概要#
MGL::System::Chronoは実行環境の時間を取得するためのクラスです。
宣言#
namespace MGL::System
{
class Chrono;
}
利用例#
- 現在の時刻を世界協定時で取得する例
// 現在時刻をUNIXエポック時間で取得 auto currentTime = MGL::System::Chrono().GetCurrentEpochTime(); MGL_TRACE("UNIXエポック時間: %lld", currentTime); // UNIXエポック時間を日時に変換して表示 MGL::System::DateTime currentDateTime(currentTime); MGL_TRACE("時刻(世界協定時): %d-%02d-%02d %02d:%02d:%02d", currentDateTime.year, currentDateTime.month, currentDateTime.day, currentDateTime.hour, currentDateTime.minute, currentDateTime.second);
UNIXエポック時間: 1711123023 時刻(世界協定時): 2024-03-22 15:57:03
注釈
ローカル時間を取得する場合はMGL::System::Locale::GetLocalDateTimeも参照してください。
- 経過時間を測定する例
MGL::System::Chrono chrono; // 開始時間を取得 auto startTick = chrono.GetTickTime(); // 現在のスレッドを1秒間ブロック (1秒間処理を止める) std::this_thread::sleep_for(std::chrono::seconds(1)); // 終了時間を取得し、差分を算出 auto endTick = chrono.GetTickTime(); auto passTick = chrono.GetTickPassTime(startTick, endTick); // ミリ秒へ変換 auto passTime = chrono.TicksToMilliseconds(passTick); // 差分のCPU時間を表示 MGL_TRACE("1秒間の差分(CPU時間): %lld", passTick); MGL_TRACE("ミリ秒: %f", passTime);
1秒間の差分(CPU時間): 24025444 ミリ秒: 985.043213
メンバ情報#
種類 |
名前 |
内容 |
バージョン |
---|---|---|---|
関数 |
現在時刻をUNIXエポック時間で取得 |
1.1.12+ |
|
関数 |
日数を秒数に変換 |
1.1.12+ |
|
関数 |
時間を秒数に変換 |
1.1.12+ |
|
関数 |
分を秒数に変換 |
1.1.12+ |
|
関数 |
CPU時間が扱えるかの取得 |
1.0.0+ |
|
関数 |
現在のCPU時間を取得 |
1.0.0+ |
|
関数 |
2つのCPU時間から経過時間を取得 |
1.1.12+ |
|
関数 |
CPU時間をミリ秒に変換 |
1.0.0+ |
|
関数 |
CPU時間をマイクロ秒に変換 |
1.0.0+ |
|
関数 |
CPU時間をナノ秒に変換 |
1.0.0+ |
GetCurrentEpochTime#
現在時刻をUNIXエポック時間で取得
宣言#
namespace MGL::System
{
class Chrono
{
[[nodiscard]] EpochTime GetCurrentEpochTime() const noexcept;
};
}
戻り値#
- MGL::System::EpochTime
現在時刻を表すUNIXエポック時間
説明#
現在時刻をUNIXエポック時間で取得します。
戻り値のUNIXエポック時間は世界協定時の1970年1月1日0時0分0秒を0とした秒単位の時間です。一般的な日時の形式に変換する場合、MGL::System::DateTimeのコンストラクタの引数にこの値を指定して初期化してください。
UNIXエポック時間の詳細についてはMGL::System::EpochTimeを参照してください。
利用例#
// 現在時刻をUNIXエポック時間で取得
auto currentTime = MGL::System::Chrono().GetCurrentEpochTime();
MGL_TRACE("UNIXエポック時間: %lld", currentTime);
// UNIXエポック時間を日時に変換して表示
MGL::System::DateTime currentDateTime(currentTime);
MGL_TRACE("時刻(世界協定時): %d-%02d-%02d %02d:%02d:%02d",
currentDateTime.year,
currentDateTime.month,
currentDateTime.day,
currentDateTime.hour,
currentDateTime.minute,
currentDateTime.second);
- 実行結果
UNIXエポック時間: 1711123023 時刻(世界協定時): 2024-03-22 15:57:03
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
DaysToSeconds#
日数を秒数に変換
宣言#
namespace MGL::System
{
class Chrono
{
static constexpr int32_t DaysToSeconds(int32_t days) noexcept;
};
}
引数#
- int32_t days
変換する日数
戻り値#
- int32_t
変換後の秒数
説明#
日数を秒に変換します。
利用例#
// 30日間を秒数に変換
auto seconds = MGL::System::Chrono::DaysToSeconds(30);
MGL_TRACE("30日間 = %d秒", seconds);
- 実行結果
30日間 = 2592000秒
バージョン情報#
- MGL 1.1.12
初回リリース
関連#
HoursToSeconds#
時間を秒数に変換
宣言#
namespace MGL::System
{
class Chrono
{
static constexpr int32_t HoursToSeconds(int32_t hours) noexcept;
};
}
引数#
- int32_t hours
変換する時間
戻り値#
- int32_t
変換後の秒数
説明#
時間を秒に変換します。
利用例#
// 12時間を秒数に変換
auto seconds = MGL::System::Chrono::HoursToSeconds(12);
MGL_TRACE("12時間 = %d秒", seconds);
- 実行結果
12時間 = 43200秒
バージョン情報#
- MGL 1.1.12
初回リリース
関連#
MinutesToSeconds#
分を秒数に変換
宣言#
namespace MGL::System
{
class Chrono
{
static constexpr int32_t MinutesToSeconds(int32_t minutes) noexcept;
};
}
引数#
- int32_t minutes
変換する分
戻り値#
- int32_t
変換後の秒数
説明#
分を秒に変換します。
利用例#
// 30分を秒数に変換
auto seconds = MGL::System::Chrono::MinutesToSeconds(30);
MGL_TRACE("30分 = %d秒", seconds);
- 実行結果
30分 = 1800秒
バージョン情報#
- MGL 1.1.12
初回リリース
関連#
IsAvailableTickTimer#
CPU時間が扱えるかの取得
宣言#
namespace MGL::System
{
class Chrono
{
[[nodiscard]] bool IsAvailableTickTimer() const noexcept;
};
}
戻り値#
- bool
有効である場合は
true
、無効な場合はfalse
説明#
実行中の環境でCPU時間が扱えるかを取得します。
CPU時間についての詳細はMGL::System::TickTimeを参照してください。
この変数がfalse
を返す場合、その環境ではCPU時間が扱えない事を意味しています。
利用例#
if (MGL::System::Chrono().IsAvailableTickTimer())
{
MGL_TRACE("CPU時間の取得が有効");
}
else
{
MGL_TRACE("CPU時間の取得が無効");
}
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
GetTickTime#
現在のCPU時間を取得
宣言#
namespace MGL::System
{
class Chrono
{
[[nodiscard]] TickTime GetTickTime() const noexcept;
};
}
戻り値#
- MGL::System::TickTime
現在のCPU時間
説明#
現在のCPU時間を取得します。
CPU時間は実行環境に依存するため厳格な定義はありませんが、多くの環境では電源投入時からの経過時間を、プロセッサの動作クロックに依存した精度で取得します。CPU時間の詳細についてはMGL::System::TickTimeを参照してください。
この関数が返す値はそのままでは人間が読み取ることはできないため、次のAPIにて変換して使用してください。
ミリ秒に変換: TicksToMilliseconds
マイクロ秒に変換: TicksToMicroseconds
ナノ秒に変換: TicksToNanoseconds
警告
macOS、iOS/iPadOS、tvOSにおいては、本関数はmach_absolute_time()
を使用しています。この関数は理由の宣言が求められるAPIの対象であるため、用途が時間計測のみに限定されています。
AppleのApp Storeへの登録を前提としている場合、本関数を時間計測以外の用途で使用しないでください。それ以外の用途で使用した場合、App Storeへの登録が拒否される場合があります。
なお、理由の宣言はMGL側で行なっているため、アプリケーション側では対応する必要はありません。
利用例#
MGL::System::Chrono chrono;
// 実行環境がCPU時間に対応しているかを取得
if (chrono.IsAvailableTickTimer())
{
// 現在のCPU時間を取得してトレース表示
auto currentTickTime = chrono.GetTickTime();
MGL_TRACE("現在のCPU時間: %lld", currentTickTime);
}
else
{
MGL_TRACE("CPU時間の取得に対応していません");
}
- 実行結果(一例)
現在のCPU時間: 23549594551427
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
GetTickPassTime#
2つのCPU時間から経過時間を取得
宣言#
namespace MGL::System
{
class Chrono
{
[[nodiscard]] static constexpr TickTime GetTickPassTime(TickTime start, TickTime end);
};
}
引数#
- MGL::System::TickTime start
開始時間
- MGL::System::TickTime end
終了時間
戻り値#
開始時間から終了時間までの経過時間
説明#
2つのCPU時間の差分を取り、経過時間を算出します。
CPU時間は64ビットで表現されており、時間経過によってオーバーフローにより0にループする性質があります。本関数は引数start
とend
の大小関係を比較し、オーバーフローを考慮した経過時間の算出を行います。
利用例#
MGL::System::Chrono chrono;
// 開始時間を取得
auto startTick = chrono.GetTickTime();
// 現在のスレッドを1秒間ブロック (1秒間処理を止める)
std::this_thread::sleep_for(std::chrono::seconds(1));
// 終了時間を取得し、差分を算出
auto endTick = chrono.GetTickTime();
auto passTick = chrono.GetTickPassTime(startTick, endTick);
// 差分のCPU時間を表示
MGL_TRACE("1秒間の差分(CPU時間): %lld", passTick);
- 実行結果(一例)
1秒間の差分(CPU時間): 24025209
バージョン情報#
- MGL 1.1.12
初回リリース
- MGL 1.1.13
関数を
static
に変更関数の戻り値に
[[nodiscard]]
属性を付与
関連#
TicksToMilliseconds#
CPU時間をミリ秒に変換
宣言#
namespace MGL::System
{
class Chrono
{
[[nodiscard]] float TicksToMilliseconds(TickTime tickTime) const noexcept;
};
}
引数#
- MGL::System::TickTime tickTime
変換元のCPU時間
戻り値#
- float
ミリ秒への変換結果
説明#
CPU時間をミリ秒に変換します。
CPU時間の精度は実行環境によって異なるため、取得した環境で人間の読める時間に変換する必要があります。本関数は、実行環境が取得するCPU時間をミリ秒へと変換します。
CPU時間の詳細はMGL::System::TickTimeを参照してください。
利用例#
MGL::System::Chrono chrono;
// 開始時間を取得
auto startTick = chrono.GetTickTime();
// 現在のスレッドを1秒間ブロック (1秒間処理を止める)
std::this_thread::sleep_for(std::chrono::seconds(1));
// 終了時間を取得し、差分を算出
auto endTick = chrono.GetTickTime();
auto passTick = chrono.GetTickPassTime(startTick, endTick);
// ミリ秒へ変換
auto passTime = chrono.TicksToMilliseconds(passTick);
// 差分のCPU時間を表示
MGL_TRACE("1秒間の差分(CPU時間): %lld", passTick);
MGL_TRACE("ミリ秒: %f", passTime);
- 実行結果(一例)
1秒間の差分(CPU時間): 24025444 ミリ秒: 985.043213
注釈
測定時間の誤差の原因は様々な理由が考えられますが、この例においてはスレッドのブロック時間の精度に起因していると考えられます。
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.12
リネーム:
ConvertTickTimeToMillisecond
→TicksToMilliseconds
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
TicksToMicroseconds#
CPU時間をマイクロ秒に変換
宣言#
namespace MGL::System
{
class Chrono
{
[[nodiscard]] float TicksToMicroseconds(TickTime tickTime) const noexcept;
};
}
引数#
- MGL::System::TickTime tickTime
変換元のCPU時間
戻り値#
- float
マイクロ秒への変換結果
説明#
CPU時間をマイクロ秒に変換します。
CPU時間の精度は実行環境によって異なるため、取得した環境で人間の読める時間に変換する必要があります。本関数は、実行環境が取得するCPU時間をマイクロ秒へと変換します。
CPU時間の詳細はMGL::System::TickTimeを参照してください。
利用例#
MGL::System::Chrono chrono;
// 開始時間を取得
auto startTick = chrono.GetTickTime();
// 現在のスレッドを1秒間ブロック (1秒間処理を止める)
std::this_thread::sleep_for(std::chrono::seconds(1));
// 終了時間を取得し、差分を算出
auto endTick = chrono.GetTickTime();
auto passTick = chrono.GetTickPassTime(startTick, endTick);
// マイクロ秒へ変換
auto passTime = chrono.TicksToMicroseconds(passTick);
// 差分のCPU時間を表示
MGL_TRACE("1秒間の差分(CPU時間): %lld", passTick);
MGL_TRACE("マイクロ秒: %f", passTime);
- 実行結果(一例)
1秒間の差分(CPU時間): 24025050 マイクロ秒: 985027.062500
注釈
測定時間の誤差の原因は様々な理由が考えられますが、この例においてはスレッドのブロック時間の精度に起因していると考えられます。
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.12
リネーム:
ConvertTickTimeToMicrosecond
→TicksToMicroseconds
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
TicksToNanoseconds#
CPU時間をナノ秒に変換
宣言#
namespace MGL::System
{
class Chrono
{
[[nodiscard]] float TicksToMilliseconds(TickTime tickTime) const noexcept;
};
}
引数#
- MGL::System::TickTime tickTime
変換元のCPU時間
戻り値#
- float
ナノ秒への変換結果
説明#
CPU時間をナノ秒に変換します。
CPU時間の精度は実行環境によって異なるため、取得した環境で人間の読める時間に変換する必要があります。本関数は、実行環境が取得するCPU時間をナノ秒へと変換します。
CPU時間の詳細はMGL::System::TickTimeを参照してください。
利用例#
MGL::System::Chrono chrono;
// 開始時間を取得
auto startTick = chrono.GetTickTime();
// 現在のスレッドを1秒間ブロック (1秒間処理を止める)
std::this_thread::sleep_for(std::chrono::seconds(1));
// 終了時間を取得し、差分を算出
auto endTick = chrono.GetTickTime();
auto passTick = chrono.GetTickPassTime(startTick, endTick);
// ナノ秒へ変換
auto passTime = chrono.TicksToNanoseconds(passTick);
// 差分のCPU時間を表示
MGL_TRACE("1秒間の差分(CPU時間): %lld", passTick);
MGL_TRACE("ナノ秒: %f", passTime);
- 実行結果(一例)
1秒間の差分(CPU時間): 24025431 ナノ秒: 985042688.000000
注釈
測定時間の誤差の原因は様々な理由が考えられますが、この例においてはスレッドのブロック時間の精度に起因していると考えられます。
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.12
リネーム:
ConvertTickTimeToNanosecond
→TicksToNanoseconds
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与