プロが教えるわが家の防犯対策術!

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ビットで取得する方法を教えていただけないでしょうか?
よろしくお願いします

A 回答 (2件)

秒数を求めるならQueryPerformanceFrequency で取得できる1秒当たりの周波数で割ってください



なおVista以降はGetTickCount64が使えます
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/20 21:00

QueryPerformanceCounterで返すのはパフォーマンスカウンタのカウント値です。


QueryPerformanceFrequencyと組み合わせないと処理時間は分かりません。

//////////////////////////////////////
LARGE_INTEGER Freq={0}, Begin={0}, End={0};
DWORD pastmsec = 0;

QueryPerformanceFrequency(&Freq);
QueryPerformanceCounter(&Begin);
//処理時間計りたい処理
QueryPerformanceCounter(&End);

pastmsec= (End- Begin) * 1000 / Freq;
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/12/20 21:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!