タイマーコントロールについて – プログラミング – Home

タイマーコントロールについて
 
通知
すべてクリア

[解決済] タイマーコントロールについて


test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

VisualStudio2005でタイマーコントロールを使用したアプリを作成しています。タイマ
ーのIntervalを60000で設定し1分毎に処理させているのですがこのタイマー間隔を現在
時刻と誤差なく連動させたいのですが実現できますでしょうか?

例えば、現在時刻が15時33分24秒だとしてタイマーを1分間隔でセットし、時刻が34分
ジャスト(秒が00秒)になったらタイマー処理が走るようなことがしたいです。

タイマーコントロールだけでは実現出来ないでしょうか?タイマーのAPI等が必要になっ
てきますでしょうか?


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>VisualStudio2005でタイマーコントロール
プロジェクトの種類はなんでしょうか?

CLR Windows フォームアプリケーションでしょうか?


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

Blueさん

>>CLR Windows フォームアプリケーションでしょうか?

はい、そうです。

tmrNowTime->Interval = 60000;
tmrNowTime->Enabled = true;

としています。

タイマー起動後の経過時間を取得する方法はAPIでしょうか?

経過時間と現在時間の秒を比較して(そもそも比較出来るのかが?ですが)00じゃなかった
ら00になるまで処理をしない(Enabled = false)という方法を考えましたがこの考え方は
正しいでしょうか?もっと誤差が出ないような方法があればご教授お願いします。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

C++だけをターゲットとしないで、C#やVB.NETも同じFrameworkを使っているので
あわせて検索してみるとよいでしょう。

処理時間を正確に計測するには?[2.0のみ、C#、VB]
http://www.atmarkit.co.jp/fdotnet/dotnettips/412stopwatch/stopwatch.html


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
 

許容できる誤差はどの位でしょうか?

0.1秒や0.2秒位までの精度ならば、現在時刻と15時34分00秒までの
差の分でタイマーをセットすれば多分十分でしょう。

一分毎の処理が終わったら、処理終了後にまた現在時刻を取得して、
次の処理の時刻までの値でセット。

また、Windowsを操作していて、1秒や2秒(あるいはもっと)反応が
無い時がありますが、このような経験をお持ちですよね?
このような時には、あなたのプログラムもジャストの処理から
遅れる場合がありますが、これが許容できるのならば
上記の方法で十分です。


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

Blueさん たいちうさん

迅速なアドバイスありがとうございます。今回は0.1秒や0.2秒位までは誤差の許容範囲
ですのでタイマー経過値と現在時刻の差を求めてタイマーにセットしようと思います。

Blueさんの紹介してくださったストップウオッチクラスも今後役に立ちそうです。

タイマーコントロールですが経過時間を取得する方法を調べたのですがAPIだと
timeGetTimeが使用出来そうです。もしくはBlueさんが紹介してくださったクラスを使用
するかのどちらかです。

タイマーコントロール自体には経過時間を取得できるものはないみたいですね(><)


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

Blueさん

たびたびすみません。

テスト的にストップウオッチクラスを使用してみようと思ったのですが

using namespace System::Diagnostics;

とし

Stopwatch sw = gcnew Stopwatch();

でリビルドした所

error C3673: 'System::Diagnostics::Stopwatch' : クラスはコピー コンストラクタを
含んでいません

上記のエラーが表示されました。CLRで使用する場合、上記の方法以外の記述をしなけれ
ばならないのでしょうか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>Stopwatch sw = gcnew Stopwatch();
Stopwatch sw^ = gcnew Stopwatch();

gcnewして代入するときの左辺はハットがついた型になります。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

間違えました。 orz

>Stopwatch sw^ = gcnew Stopwatch();
Stopwatch^ sw = gcnew Stopwatch();


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

Blueさん

親切にありがとうございます。^まだCLIに慣れなくて忘れがちになってしまうんです
よね(汗)gcnewもnewと書いてしまうことも多々あります。

せっかくなのでStopWatchクラスを使用して経過時間を取得してみようと思います。


返信引用
test
 test
(@test)
ゲスト
結合: 18年前
投稿: 28
Topic starter  

みなさまのアドバイスを元に意図した動作のアプリが実装できました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました