目覚まし – プログラミング – Home

通知
すべてクリア

目覚まし


トール
 トール
(@トール)
ゲスト
結合: 22年前
投稿: 8
Topic starter  

はじめまして、トールと申します。

ある時刻になったら何かするってのはどう実装すればよいでしょうか?
一定時間経ったら何かするってのは、SetTimer()を使えば良いみたいですが、
私のやりたいのは、定期的にある処理をしていて、ある時刻(例:5時10分)に
なったら別の処理を行うというものです。
内部的に目覚ましみたいなものを作成したいのですが、どのように
作れば良いでしょうか?

よろしくお願いします


引用解決済
トピックタグ
toru
 toru
(@toru)
ゲスト
結合: 23年前
投稿: 48
 

一定時間ごとにGetLocalTimeとかを使って時間を取得すればいいんじゃないですか。


返信引用
Mr.Tame
 Mr.Tame
(@Mr.Tame)
ゲスト
結合: 22年前
投稿: 4
 

はじめまして。

TimerID = SetTimer(hWnd, ID_TIMER, 1000, (TIMERPROC)TimerProc);

void CALLBACK TimerProc(HWND hWnd,UINT uMsg,UINT idEvent,DWORD dwTime)
{
SYSTEMTIME st;
int hour,min;

GetLocalTime(&st);
hour = st.wHour;
min = st.wMinute;

if ((hour == 5) && (min == 10)){
//何らかの処理
  }

return ;
}
というのはどうですか?(試したわけではないですけど・・・)。


返信引用
toru
 toru
(@toru)
ゲスト
結合: 23年前
投稿: 48
 

タイマーの精度をもうちょっと落としても良いんじゃないですか?
だいたい60000ms(←たぶん1分)くらいで。


返信引用
トール
 トール
(@トール)
ゲスト
結合: 22年前
投稿: 8
Topic starter  

こんにちわ、トールです。
toruさん、Mr.Tameさん、回答ありがとうございます。

現在の時刻から特定の時刻まで何秒待てば良いのか調べます。
その時間をSetTimerに渡して、その時刻になったらコールバックルーチン
が呼ばれるといった実装にしようかと思います。
アドバイスありがとうございました。

サンプルを作って試してみます。


返信引用
Mr.Tame
 Mr.Tame
(@Mr.Tame)
ゲスト
結合: 22年前
投稿: 4
 

もし、60000msにタイマーを設定すると
パソコンに電源を入れ続け長期間使用して
いたら誤差がでてくるかもしれませんね。
その必要がないのなら、60000msでも
いいとおもいますけど・・・・。


返信引用
toru
 toru
(@toru)
ゲスト
結合: 23年前
投稿: 48
 

というかパソコンの時計なんて放っておいたら10分くらい平気でずれますし。


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 23年前
投稿: 217
 

60秒間隔でチェックしてると誤差がなくてもタイミング次第で最悪59秒は遅れちゃいます
ね。


返信引用
toru
 toru
(@toru)
ゲスト
結合: 23年前
投稿: 48
 

Mr.Tameさんが書いたコード
> if ((hour == 5) && (min == 10)){
の部分を

if (sec >= 30) { min ++; }
if (hour == 5 && min >= 10 && min <= 11) {

と書きかえれば、29秒以内に抑えられます。

というか根本的にタイマを60000msに設定した場合
> if ((hour == 5) && (min == 10)){
これじゃダメですね。


返信引用
toru
 toru
(@toru)
ゲスト
結合: 23年前
投稿: 48
 

訂正

> if (hour == 5 && min >= 10 && min <= 11) {

if (hour == 5 && min >= 10 && min <= 12) {


返信引用
kazuma
 kazuma
(@kazuma)
ゲスト
結合: 23年前
投稿: 217
 

なるほど四捨五入するわけですね。
分単位で設定するアプリならそれで十分かもしれませんね。

結局トールさんの解決策が一番よさそうですが。
解決済みなのに話を蒸し返して申し訳なかったです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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