#define TIME_THREAD_ACTIVE implementation-defined
概要
呼び出しスレッドの処理時間 (CPU時間) ベースであることを指定するための整数定数値。処理系定義のオプションのマクロである。
このベース時間をtimespec_get()に指定した場合、呼び出しスレッドに関連する処理時間を取得する。
処理系がスレッドをサポートしない場合、このマクロは定義されない。定義される場合、その値はTIME_UTC・TIME_MONOTONIC・TIME_ACTIVEとは異なる。
C23で<time.h>に追加されたマクロであり、C++26で<ctime>に取り込まれた。
備考
- このベース時間は呼び出しスレッドが実際にCPUで処理を行った時間 (active processing time) であり、実時間 (wall-clock time) ではない。スリープやブロッキングで待機している間の時間は計測に含まれない
- スレッドごとに別個の値であり、あるスレッドで取得した値を別のスレッドで
timespec_get()・timespec_getres()のベース引数として使用してはならない
例
#include <ctime>
#include <thread>
#include <print>
void worker()
{
std::timespec t1;
std::timespec_get(&t1, TIME_THREAD_ACTIVE);
// このスレッドで実際に計算を行う (スリープでは処理時間は増えない)
volatile long sum = 0;
for (long i = 0; i < 100'000'000; ++i) {
sum += i;
}
std::timespec t2;
std::timespec_get(&t2, TIME_THREAD_ACTIVE);
// このスレッドが計算に費やしたCPU処理時間が計測される
// (秒の差) + (ナノ秒の差を秒に変換)。1秒は1'000'000'000ナノ秒
double sec = (t2.tv_sec - t1.tv_sec) + (t2.tv_nsec - t1.tv_nsec) / 1'000'000'000.0;
std::println("{:.3f}", sec);
}
int main()
{
std::thread th{worker};
th.join();
}
出力例
0.123
バージョン
言語
- C++26
処理系
- Clang: 22 ❌
- GCC: 16.1 ❌
- Visual C++: 2026 Update 2 ❌
関連項目
timespec_get(): 指定したベース時間に基づいた、経過秒と経過ナノ秒を取得するTIME_ACTIVE: プログラム全体の処理時間ベースであることを指定する
参照
- P3348R4 C++26 should refer to C23 not C17
- C++26がC23を参照するようになり、このマクロが
<ctime>に追加された
- C++26がC23を参照するようになり、このマクロが