C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

特定の時刻になったらイベントを発生させる仕組みを作る場合

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■94182 / inTopicNo.1)  特定の時刻になったらイベントを発生させる仕組みを作る場合
  
□投稿者/ わくまうり (1回)-(2020/03/24(Tue) 10:21:12)

分類:[VB.NET/VB2005 以降] 

タイトルのように、特定の時刻になったらイベントを発生させる仕組みを作ろうとしています。
この場合、TIMERで常時監視するしか方法がないのでしょうか
常にTIMERを走らせている場合、処理が重くなるのではないかというのを危惧しています。
TIMERの監視間隔を30秒や1分にすれば、毎秒監視するのと比べて、それほど重くならないのではないかとも考えてはいるのですが・・・
引用返信 編集キー/
■94184 / inTopicNo.2)  Re[1]: 特定の時刻になったらイベントを発生させる仕組みを作る場合
□投稿者/ furu (23回)-(2020/03/24(Tue) 10:42:26)
No94182 (わくまうり さん) に返信
> タイトルのように、特定の時刻になったらイベントを発生させる仕組みを作ろうとしています。
> この場合、TIMERで常時監視するしか方法がないのでしょうか
「あとxx分xx秒」とか表示するのでなければ
現在時間から特定の時刻までの時間をTIMERの監視間隔にセットし
TIMERのイベントは1回で済ますようにします。

 TIMERの監視間隔 = 特定の時刻 - 現在時間
引用返信 編集キー/
■94185 / inTopicNo.3)  Re[1]: 特定の時刻になったらイベントを発生させる仕組みを作る場合
□投稿者/ 魔界の仮面弁士 (2630回)-(2020/03/24(Tue) 10:57:39)
2020/03/24(Tue) 11:46:54 編集(投稿者)

No94182 (わくまうり さん) に返信
> タイトルのように、特定の時刻になったらイベントを発生させる仕組みを作ろうとしています。

特定の時刻に処理を実行したいなら、アプリを常駐させる必要は無く、
その処理を単体の exe にしてタスク スケジューラに登録しておけば良いのでは無いでしょうか。
https://www.atmarkit.co.jp/ait/articles/1305/31/news049.html



> この場合、TIMERで常時監視するしか方法がないのでしょうか

TIMER と一口にいっても、色々あったりします。

https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.visualbasic.dateandtime.timer?view=netframework-4.8
https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.win32.systemevents.createtimer?view=netframework-4.8
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.threading.dispatchertimer?view=netframework-4.8
https://www.atmarkit.co.jp/ait/articles/0511/11/news117.html
https://www.atmarkit.co.jp/ait/articles/0511/11/news118.html
https://www.atmarkit.co.jp/ait/articles/0511/11/news119.html

※Timeクラス を TIMER に含めて良いのかは微妙なところですが。


> 常にTIMERを走らせている場合、処理が重くなるのではないかというのを危惧しています。

たとえば System.Windows.Forms.Timer は、UI スレッド上で動きます。

・Button1_Click が、ボタンを押した時しか呼び出されないのと同じで、
 Timer1_Tick は、Interval が経過した後でしか呼び出されません。
・イベント処理が行われていないアイドル時の CPU 負荷はほぼゼロですが、その逆に、
 UI スレッドが重い処理を行っていてアイドル状態にならない場合、Tick の発生が阻害されます。
・Tick あるいはその他のイベント内で長い処理を行うような場合には向きません。


長い処理がかかるような場合は、ワーカースレッドを用意して
不要な時間帯は Sleep させておくという手もありますが、
その場合、ワーカスレッドの監視を安全に中止させる手段も
用意しておく必要があるでしょう。


それと、目的の時刻付近でシステム時刻が変更された場合、
「特定の時刻」を通り過ぎてしまう場合や、
「特定の時刻」が再度発生する可能性もあるので、
そうした場合にどう対処するのかも、
あらかじめ検討しておいた方が良いかもしれません。
https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.win32.systemevents.timechanged?view=netframework-4.8
引用返信 編集キー/
■94196 / inTopicNo.4)  Re[2]: 特定の時刻になったらイベントを発生させる仕組みを作る場合
□投稿者/ わくまうり (2回)-(2020/03/24(Tue) 16:21:34)
No94185 (魔界の仮面弁士 さん) に返信
> 2020/03/24(Tue) 11:46:54 編集(投稿者)
>
> ■No94182 (わくまうり さん) に返信
>>タイトルのように、特定の時刻になったらイベントを発生させる仕組みを作ろうとしています。
>
> 特定の時刻に処理を実行したいなら、アプリを常駐させる必要は無く、
> その処理を単体の exe にしてタスク スケジューラに登録しておけば良いのでは無いでしょうか。
> https://www.atmarkit.co.jp/ait/articles/1305/31/news049.html
>

すみません言葉足らずでした
特定の時刻に条件を満たしていたら、イベントを発生させるという仕組みのため、今作成している処理内で仕組みを作る必要があります。

>
>
>>この場合、TIMERで常時監視するしか方法がないのでしょうか
>
> TIMER と一口にいっても、色々あったりします。
>
> https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.visualbasic.dateandtime.timer?view=netframework-4.8
> https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.win32.systemevents.createtimer?view=netframework-4.8
> https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.threading.dispatchertimer?view=netframework-4.8
> https://www.atmarkit.co.jp/ait/articles/0511/11/news117.html
> https://www.atmarkit.co.jp/ait/articles/0511/11/news118.html
> https://www.atmarkit.co.jp/ait/articles/0511/11/news119.html
>
> ※Timeクラス を TIMER に含めて良いのかは微妙なところですが。
>
>
>>常にTIMERを走らせている場合、処理が重くなるのではないかというのを危惧しています。
>
> たとえば System.Windows.Forms.Timer は、UI スレッド上で動きます。
>
> ・Button1_Click が、ボタンを押した時しか呼び出されないのと同じで、
>  Timer1_Tick は、Interval が経過した後でしか呼び出されません。
> ・イベント処理が行われていないアイドル時の CPU 負荷はほぼゼロですが、その逆に、
>  UI スレッドが重い処理を行っていてアイドル状態にならない場合、Tick の発生が阻害されます。
> ・Tick あるいはその他のイベント内で長い処理を行うような場合には向きません。

常に開いた状態で使用する可能性がある為、上記は十分あり得ますね

>
>
> 長い処理がかかるような場合は、ワーカースレッドを用意して
> 不要な時間帯は Sleep させておくという手もありますが、
> その場合、ワーカスレッドの監視を安全に中止させる手段も
> 用意しておく必要があるでしょう。

ワーカースレッドというものがあるんですね
調べてみます。

>
>
> それと、目的の時刻付近でシステム時刻が変更された場合、
> 「特定の時刻」を通り過ぎてしまう場合や、
> 「特定の時刻」が再度発生する可能性もあるので、
> そうした場合にどう対処するのかも、
> あらかじめ検討しておいた方が良いかもしれません。
> https://docs.microsoft.com/ja-jp/dotnet/api/microsoft.win32.systemevents.timechanged?view=netframework-4.8


ありがとうございます。
引用返信 編集キー/
■94197 / inTopicNo.5)  Re[2]: 特定の時刻になったらイベントを発生させる仕組みを作る場合
□投稿者/ わくまうり (3回)-(2020/03/24(Tue) 16:22:02)
No94184 (furu さん) に返信
> ■No94182 (わくまうり さん) に返信
>>タイトルのように、特定の時刻になったらイベントを発生させる仕組みを作ろうとしています。
>>この場合、TIMERで常時監視するしか方法がないのでしょうか
> 「あとxx分xx秒」とか表示するのでなければ
> 現在時間から特定の時刻までの時間をTIMERの監視間隔にセットし
> TIMERのイベントは1回で済ますようにします。
>
>  TIMERの監視間隔 = 特定の時刻 - 現在時間

このやり方は思いつきませんでした。
参考にさせていただきます。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ