質問

どのようにこわんの紹介を読み読むぞ-!欲しいアプリの走行をサーバーはイベントをトリガは毎夜03:00になります。

役に立ちましたか?

解決

使用Windowsのタスクスケジューラ

他のヒント

あなたはアプリのコードを実行している(代わりのタスクスケジューラを使用して)でこれを実行したい場合は、かなり長い(例えば、1時間、または3600秒)ですアプリの睡眠を聞かせする時間を選択する必要があります。アプリはループ、および各睡眠コールの期限が切れると、アプリは定期的に締切時間(午前三時)まで残っているどのくらいの時間をチェックします。残り睡眠時間が粗い間隔時間未満になると、それは短い間隔(毎回半分、または10秒に低減)に低減されなければなりません。ターゲット締切時間に達するまで、寝て、インターバル時間を短縮、ループを続行します。

このは(86,400 1秒間隔が過剰である)あまりにも頻繁に目覚めてからループを防止しますが、それはあまりにも長い間眠って目標期限時間をオーバーシュートからアプリループを防止します。

あなたは1秒の間隔でタイマーを作ることができ、タイマーがオフになるとき、それは3時00だかどうかを確認します。

あなたは、それは誰もがない場合でも、マシンにログインして、トリガが発生することを確実にするためにさまざまな方法がたくさんある実行されることを確実にするために、サービスにそれを構築する必要があります。

System.Timers.TimerIntervalと次の3時との間の差に設定されているDateTime.Nowを行うことを検討してください。

またオプションです。

だいこの内の既存のサービスをお使いいただけますので タイマー トリガーの自分自身3:00毎晩、お客様の"タスク".

もっとも、これらは通常、より良い取り扱いによ Windowsのタスクスケジューラ.ではなく、応用生24/7、あなただけのスケジュールを走り回毎日3:00になります。


編集:

が必要な場合は、タスクスケジューラーからのコードともコメント)も可能です。タスクスケジューラの提供 API 設定には個々のタスク(ITask のタスクスケジューラ(ITaskScheduler).

しかし、だんにXP Embedded、あばを通常のシステム構成能力、課題実行われます。組み込みシステムにおいては、広い分野での制御中は展開ではないかと思います。

ここでは、テーブルを見て、タイマーを60秒ごとに実行される書いたサービスの簡易版です...あなたは時間を確認し、それを実行するためにタイマー経過イベントを変更することができます:

Dim Timer As System.Timers.Timer

Protected Overrides Sub OnStart(ByVal args() As String)
    Timer = New System.Timers.Timer(60000)
    AddHandler Timer.Elapsed, AddressOf timer_Elapsed
    Timer.Start()
End Sub

Protected Overrides Sub OnStop()
    Timer2.Stop()
End Sub

Private Sub timer_Elapsed(ByVal pSender As Object, ByVal pargs As System.Timers.ElapsedEventArgs)
    'Ensure the tick happens in the middle of the minute
    If DateTime.Now.Second < 25 Then
        Timer.Interval = 65000
    ElseIf DateTime.Now.Second > 35 Then
        Timer.Interval = 55000
    ElseIf DateTime.Now.Second >= 25 And DateTime.Now.Second <= 35 Then
        Timer.Interval = 60000
    End If

    'Logic goes here
 End Sub
あなたは、他のみんなのようにタスクスケジューラを使用することができる場合は、

もちろん、ここで述べています。これは、これを行うための好ましい方法です。私はちょうどので、私はそれはあなたに役立つことができた場合にそれを投稿しようと思いました周りの敷設、このコードを持つことが起こりました。外部ソースがテーブルを編集しようとしていたとき、私たちは知っていたことはありませんので、また、このコードは私たちのために働きました。ミリ秒単位の正確な数に間隔を設定するとのmd5sumで指摘したように、これを行うためのはるかに効率的な方法になります。

この答えは少し左のフィールドであるかもしれないが、我々は多くの場合は、 CruiseControl.NET の使用します私たちのスケジュールされたタスクの一部。これは、それらすべてのために完璧ではないのですが、それはあなたが毎晩実行したい大きな仕事だし、他のコード/成果はそれに依存するならば、それは良い選択です。それが働いていた場合は、いつでも実行するようにスケジュールすることができ、電子メールは/失敗します。それがうまくいかなかった場合は、開始する前に必要なファイルをクリーンアップした後、他のスクリプト/コードを実行します。

必ずしもすべての状況に最適なソリューションが、それはそれを求めるものについて気に強力です。私たちは、ビッグデータ処理のジョブのいくつかのためにそれを使用し、それが働いた/失敗し、それが最初に失敗した場合でも、30分後に再試行されます場合は、すべてのEメールでのお問い合わせを送信します。それはあなたに素敵なファジーな感じを与える:)

(klausbyskovにより示唆されるように)、WindowsのタスクスケジューラまたはSQL Serverジョブます。

EDITます:

それとも、dyanically割り当てられた時間をしたい場合、あなたは10分ごとにそのポーリングするWindowsサービスを作成し、希望の時間(秒)で、いくつかのアクションを実行することができます。

C#のの中でWindowsサーバーを作成することは、かなり簡単ですし、これを行うことができます。ちょうどあなたがセキュリティを持っているし、ロギングが、それは(またはしないで)実行中に何が起こっているのか教えてはかなり難しいことができますので、考え出したことを確認します。

System.Threading.Timer して使用してください。

私はスケジュールされたタスクを実行するASP.NETアプリケーションでスレッドを生成しています。

それはあなたに利用できる持っているものに依存します。

あなたの最善の策は、Linux / Unixの上にある場合は、のcron の仕事を使用することです/ MacのOS X、Windows上でタスクスケジューラ、またはMac OS Xの新しいバージョンにのlaunchdするます。

あなたがアプリケーション内からこれをしたい場合は、

、あなたはそれが三時であればイベントオフ、定期的及び火災に時間をチェックループが必要になりますが、これは理想的ではありません。

プログラムは、コマンドラインから実行することができますか?もしそうなら、foo.batファイルを作成し、(非常にシンプルな)あなたのプログラムのコマンドラインを呼び出します。

次にタスクスケジューラは、毎日午前3時に.batファイルを実行するためにを使用しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top