とりあえず動いた!!
ってので乗っけたらいっぱいコメントがついてた。
時間の計測の部分とそうでない部分にわかれるけど、そうでない部分は今回は保留。
とりあえず、何も考えずに割りと高性能っぽいタイマーを使うとなるとこうなる
#include <iostream>
#include <windows.h>
int main(int argc, char **argv)
{
LARGE_INTEGER start;
LARGE_INTEGER end;
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
// 何かの処理
QueryPerformanceCounter(&end);
double time = ((double) end.QuadPart - (double) start.QuadPart) / (double) freq.QuadPart;
std::cout << "処理時間: " << time << "sec" << std::endl;
return 0;
}
ただ、これだとBIOSとかのバグのせいでマルチCPU環境だとうまく動かないことがありますとのこと。
MSDNにもばっちり書いてあるけど、肝心の何関数を使えっていうところで関数名が消えてるorz
英語のほうを見るとSetThreadAffinityMaskという関数を呼べばいいらしい。
SetThreadAffinityMaskは、第一引数にスレッドのハンドルで、第二引数がスレッドにどのCPU使わせるかのマスクっぽい?(自信無い)
1(0001)だと1つ目のCPU
2(0010)だと2つ目のCPU
4(0100)だと3つ目のCPU
といった具合になるのだろう。
ということで、こんな具合にやるのがとりあえず確実っぽい。
#include <iostream>
#include <windows.h>
int main(int argc, char **argv)
{
LARGE_INTEGER start;
LARGE_INTEGER end;
LARGE_INTEGER freq;
// 使うCPUを固定!
SetThreadAffinityMask(GetCurrentThread(), 1);
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&start);
// 何かの処理
QueryPerformanceCounter(&end);
double time = ((double) end.QuadPart - (double) start.QuadPart) / (double) freq.QuadPart;
std::cout << "処理時間: " << time << "sec" << std::endl;
return 0;
}
# 駄文:会社より家のほうが開発環境いいわぁ~。