我可以構建一個Windows服務並進行安裝。每小時運行一次的Windows服務
我很好奇我怎麼能每小時運行一次這項服務?我希望它定期每小時運行一次。
我還需要知道它正在運行的小時範圍,以便我可以將它存儲在某個地方。
我該怎麼做?
編輯:此服務將安裝在許多機器上,因此,我不想在100臺服務器上創建計劃任務。
我可以構建一個Windows服務並進行安裝。每小時運行一次的Windows服務
我很好奇我怎麼能每小時運行一次這項服務?我希望它定期每小時運行一次。
我還需要知道它正在運行的小時範圍,以便我可以將它存儲在某個地方。
我該怎麼做?
編輯:此服務將安裝在許多機器上,因此,我不想在100臺服務器上創建計劃任務。
如果你想有一個任務在定期運行,而不是不斷,你應該考慮使用Task Scheduler。
如果你需要你的代碼是一個服務,但要每小時「激活」,最簡單的方法是使你的服務成爲一個COM對象,並且每小時調度一個簡單的任務,調用一個jscript/vbscript創建你的COM對象並調用簡單的方法。
另一種方法是使用任何等待API「浪費」一小時而不消耗週期。
請注意,還必須考慮到,依賴於你的情況下一些有趣的設計決策是:
其中有些是由任務調度程序照顧的,所以我強烈建議在路由中等待一小時的代碼。
您可以創建一個每小時運行一次的scheduled task,以運行該服務或發送消息以「喚醒」。然後,無論是在當前時間傳遞計劃的任務請求,還是讓您的程序在喚醒時獲取當前時間。
Task Scheduler Managed Wrapper可以幫助您以編程方式進行設置;你也可以谷歌的其他資源。
但我想能夠在代碼中實現。想象這個服務將被安裝在許多服務器上,我不想去每個服務器並創建一個計劃任務。 – DarthVader 2010-04-07 02:46:00
@ user177883:您可以以編程方式創建計劃任務,就像您可以以編程方式創建服務一樣。 – 2010-04-07 02:49:42
有幾個選項。
Thread.Sleep(1000*60*60);
如果您嘗試在睡眠一小時時停止服務,會發生什麼情況? – 2010-04-08 08:37:47
Thread.Sleep(TimeSpan.FromHours(1));
代碼更易讀這樣
Thread.Sleep()
解決方案將確保您的服務將在一個小時的時間間隔運行,而不是每隔一小時即每個任務將1小時的時間+運行任務開始。考慮在您的服務中使用Timer。這將是一個更強大的解決方案,因爲您可以控制何時運行任務,監視其進度等。請記住,每個Timer
事件將在不同的線程中觸發,如果任務花費的時間超過一個小時,您可能會等待第一個任務完成以避免併發任務。
任務調度程序可能是一個好主意,但服務旨在執行此操作。服務易於安裝並正確記錄事情。您只需要在服務開始時安裝一個系統計時器(System.Threading.Timer),或者還有一個計時器。
等待API浪費CPU週期?你能詳細解釋一下嗎?等待只是系統引發的事件,我不認爲它在輪詢任何事情。 – 2011-11-07 07:25:49
我不確定你是否正確理解我。我試圖說,等待一段時間過後,等待的API優化爲不使用CPU週期。 – 2011-11-07 21:56:56