- - PR -
C# timerを使わず任意の時刻にイベントを発生させる方法
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-08-23 19:09
例えば、毎朝午前9時にイベントを発生させるにはどうすれば良いでしょうか?
確かにtimer系のクラスを使って一定周期で現在時刻を取得し、午前9時になったら イベントを発生させるというのも一つの解決です。しかし、この方法だと、200msec以内にイベントを発生させたい場合は、監視のために常時200msec周期でタイマーイベントを発生させる必要があり、効率的でありません。監視のためのイベントを必要としない解決方法はありますか? | ||||||||
|
投稿日時: 2007-08-23 19:28
ある時刻に処理を行いたい。 だから時刻を監視したい。 監視させるためには定期的に 「監視処理」 を実行する必要がある。 だけどそれを定期的に実行したくない。 こう仰っているわけですね。 この方法のどのあたりが "効率的でない" のでしょう? そのアプリケーション起動時に 1 回だけ 09:00 までの差分を取り、その差分の時間が経過した後に何かをドリブンするという方法も考えられるとは思いますが、一般的ではないと思います。 Windows であればタスク スケジューラを利用した方が賢明ではないでしょうか。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2007-08-23 19:48
私もそう思います。 負荷という意味ではタスクスケジューラが一番小さいので、 1日1回ならタスクスケジューラでやるべきですね。
200msec以内の精度で、っていうがどの位クリティカルによりますが、 普通に使ってるPCだと200msecぐらいの遅延は普通に発生しますね。 そもそも、 >監視のために常時200msec周期でタイマーイベントを発生させる必要があり、効率的でありません。 そんなことないでしょう。 明日のドラマの最初の10秒が見たいからって、 今日から10秒おきにテレビをみる必要はないですよ。 | ||||||||
|
投稿日時: 2007-08-26 00:01
回答ありがとうございます。
タスクスケジューラを使って解決しました。 | ||||||||
|
投稿日時: 2007-08-26 10:47
おそらく、午前9時までという長いタイマーは、誤差が大きくて、200msecという短いタイマーは誤差が少ない、という仮定を持たれているのでは?と推測します。(これ以外に200msecのタイマーを必要とする理由が思い浮かびません。) しかし、Windows のタイマーにはそのようなことはなく、何時間のタイマーであろうが200msecのタイマーであろうが誤差は一緒だと思います。 だから、午前9時までというタイマーを仕掛けさえすれば良く、200msecのタイマーを仕掛けるのは無駄です。タイマーに精度を必要とする理由が、それだけの処理精度を要求するのならば分かりますが、たとえば午前8時59分59秒999ms に発動すると、午前9時前なので、ロジックがうまく動かないというような理由ならば、ロジックのほうを直すべきでしょう。たとえば時刻の比較方法を変えたり、あるいは、午前8時59分59秒999msに発動したら、短時間スリープして、午前9時を経過するまで待つようにするなどです。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} |
1