プロが教える店舗&オフィスのセキュリティ対策術

Visual Studio 2005 の C++ で、カウントアップするタイマを作りたいと考えています。

今のところ、サンプルプログラムを参考に現在時刻を表示するものはできました。
これを応用して、0からカウントアップさせるプログラムを作ろうと思ったのですがなかなかできません。

初心者でなかなかイメージがわかず、単純にfor文で1個ずつ数を増やして表示させようと試みたのですが失敗に終わりました。
Windowsアプリケーションでは単純にいかないものですね。悩

何かヒントのようなもので結構ですので、力を貸していただきたいです。

A 回答 (2件)

for文で回している為にほかのメッセージが処理出来ずに表示更新が出来ない…。


という状況の可能性もあるかと思うのですが。

とりあえずは、.Netかどうかによっても違いますのでその点を表明して頂けると回答が絞り込めると思います。

私の場合MFCメインなので、SetTimerを仕掛けてOnTimerで処理するのが基本ですね。(精度が悪いですが…)
高精度を求める場合はマルチメディアタイマとスレッドの併用ですね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

はい、始めは単純にfor文で1づつ足していく作業をしていたために、
他の処理ができず表示されませんでした。

しかしローカル変数をうまく使い、1づつカウントされるタイマを
作成できました!ありがとうございます。

お礼日時:2009/09/11 08:43

現在時間からの差で求めているのでしょうか?



>単純にfor文で1個ずつ数を増やして表示させようと試みたのですが失敗に終わりました

抽象的な表現で、どう失敗したのかわからないのですが…。

VS2005ということで、.NETによる開発ですか?
.NETでの開発なら、
kernel32.dllをインポートして、
QueryPerformanceCounter等を利用すれば、より正確な時間は求められるかと思いますが…。

>Windowsアプリケーションでは単純にいかないものですね。悩
あなたのスキルの問題かと思いますよ。

サンプルとして、C#による処理時間計測プログラムを転載しておきます。これを応用すれば問題ないでしょ。

public static class StopWatch
{
[DllImport("kernel32.dll")]
extern static short QueryPerformanceCounter(ref long x);

[DllImport("kernel32.dll")]
extern static short QueryPerformanceFrequency(ref long x);

private static double strt;
public static double time;

public static void Start()
{
long cnt = 0;
long frq = 0;
QueryPerformanceCounter(ref cnt);
QueryPerformanceFrequency(ref frq);
strt = (double)cnt / (double)frq;
}

public static void Stop()
{
long cnt = 0;
long frq = 0;
QueryPerformanceCounter(ref cnt);
QueryPerformanceFrequency(ref frq);
double c = (double)cnt / (double)frq;
time = (c - strt) * 1000;
}
}

Start()を呼び出して、Stop()を呼び出す。
StopWatchクラスのtimeを参照すれば時間が記録されています。
    • good
    • 0
この回答へのお礼

言葉不足で申し訳ありません。
ご丁寧にサンプルプログラムありがとうございます。

無事解決することができました。
ありがとうございました。

お礼日時:2009/09/11 08:45

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