アプリ版:「スタンプのみでお礼する」機能のリリースについて

Windowsの連続起動時間を表示するプログラムを作りたいのですがどのようにしたらいいでしょうか?
Vistaはタスクマネージャーから、XPのProはコマンドから起動時間を見る事は出来ますが、あいにくHomeという事なので練習も兼ねて作ってみたいと思った次第です。
関数としては、timeGettime()の制度がいいみたいなのでこれを使おうと思うのですが、単位はミリ秒で取得すると書いてありました。
また、47.1日を過ぎると桁あふれで戻ってしまうと聞きました。
ネットでいろいろ調べたのですが、fpsの測定に利用されてるみたいでサンプルもありましたが、純粋に起動時間を表示するならどのようにしたらいいでしょうか?
timeGettime()自体がWindowsが起動してからの時間をミリ秒で返すのは分かっていますが、47日を超える起動でも正常にカウントするようには出来ないものでしょうか?
サンプル的なものを教えていただければ大変助かります。
初心者のレベルなので何卒よろしくお願いします。
ちなみに、VisualStudio2008のC言語を使用しています

A 回答 (2件)

★アドバイス


>47日を超える起動でも正常にカウントするようには出来ないものでしょうか?
 ↑
 Windows Vista から次の API が利用可能になりました。
 GetTickCount64(http://msdn.microsoft.com/en-us/library/ms724411 …
・Windows Vista 以前では利用できませんので回答者No.1さんのアドバイスにある
 QueryPerformanceCounter 関数を利用して下さい。こちらは 64 ビットの整数です。
 よって 47 日以上でも正常に取得可能。

サンプル:
LARGE_INTEGER i64Count;
DWORD i32Count;

// 起動経過時間(64Bit)
QueryPerformanceCounter( &i64Count );

// 起動経過時間(32Bit)
timeBeginPeriod(1);
i32Count = timeGetTime();
timeEndPeriod(1);

i64Count⇒64ビット整数(i64Count.QuadPartを参照)
i32Count⇒32ビット整数

64ビット整数の共用体
(http://msdn.microsoft.com/en-us/library/aa383713 …
typedef union _LARGE_INTEGER {
 struct {
  DWORD LowPart;  // 符号付きの32ビット整数(下位)
  LONG HighPart;  // 符号付きの32ビット整数(上位)
 };
 struct {
  DWORD LowPart;  // 符号付きの32ビット整数(下位)
  LONG HighPart;  // 符号付きの32ビット整数(上位)
 } u;
 LONGLONG QuadPart;  // 符号付きの64ビット整数
} LARGE_INTEGER, *PLARGE_INTEGER;
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
サンプルソースまでつけていただいて本当に感謝しております。

お礼日時:2008/09/11 16:34

QueryPerformanceCounterで取得するとか。



http://www.google.co.jp/search?hl=ja&q=QueryPerf …

NTイベントログから起動メッセージを検索して、そこから起動時間を計算する手も。

http://www.google.co.jp/search?hl=ja&q=eventlog+ …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
>QueryPerformanceCounter
↑こんな関数が!
ありがとうございます。
さっそくリンクから見に行かせてもらいます

お礼日時:2008/09/11 16:33

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