• ベストアンサー

QueryPerformanceCounter の使い方の間違いの指摘をお願いします。

Windowsの起動してからの時間を知りたいのです、QueryPerformanceCounterを使っています。 前は、timeGetTimeを使っていたのですが32ビットで47日以上はオーバーフローになってしまうので上のを使うことにしました。 QueryPerformanceCounterの使い方をいろいろ調べて見よう見まねでやってみたのですが、よく分からずtimeGetTimeのように使ったら訳の分からない値を返してきました。 明らかに、自分が間違っていることは分かるのですが、その致命的な間違いが分かりません。 MSDNより BOOL QueryPerformanceCounter( LARGE_INTEGER *lpPerformanceCount // カウンタの値 ); typedef union _LARGE_INTEGER { struct { DWORD LowPart; DWORD HighPart; }; LONGLONG QuadPart; } LARGE_INTEGER, *PLARGE_INTEGER; この時点でいまいちよく分からなかったのですが、使う部分は64ビットなので「QuadPart」だろうと思いました。 LONGLONG型・・・。 理解せずにプログラムを以下のように組みました。 私の理解では、QueryPerformanceCounterはWindowsが起動してからの時間を返してくれるものだと思っています。 #include <stdio.h> #include <windows.h> int main() { LARGE_INTEGER i64; LONGLONG count; QueryPerformanceCounter(&i64); count = i64.QuadPart; printf("LONGLONG=%lld\n" , count); return 0; } 実行結果 LONGLONG=3670653187373 続行するには何かキーを押してください . . . 実際の経過時間 1025500秒 基本がわかってないとは思うのですが、QueryPerformanceCounterが実際に返してる値とWindowsが起動してからの時間を64ビットで取得する方法を教えていただけないでしょうか? よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
noname#208124
noname#208124
回答No.1

秒数を求めるならQueryPerformanceFrequency で取得できる1秒当たりの周波数で割ってください なおVista以降はGetTickCount64が使えます

googleoooo
質問者

お礼

回答ありがとうございます。 何とかできました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

QueryPerformanceCounterで返すのはパフォーマンスカウンタのカウント値です。 QueryPerformanceFrequencyと組み合わせないと処理時間は分かりません。 ////////////////////////////////////// LARGE_INTEGER Freq={0}, Begin={0}, End={0}; DWORD pastmsec = 0; QueryPerformanceFrequency(&Freq); QueryPerformanceCounter(&Begin); //処理時間計りたい処理 QueryPerformanceCounter(&End); pastmsec= (End- Begin) * 1000 / Freq;

googleoooo
質問者

お礼

回答ありがとうございます。 サンプルまでつけて頂いて、ありがとうございました

すると、全ての回答が全文表示されます。

関連するQ&A