2010-01-05 71 views
1

我正在構建需要在特定時間調用某個API的應用程序。我想爲每個調用設置執行時間,並且在每次調用需要執行時自動調用我的execute函數。什麼是最好的方法來做到這一點?什麼是延遲線程啓動直到特定時間的最佳方式?

我想過爲需要執行的每個新調用創建一個新的Timer,並將定時器的唯一間隔設置爲其執行時間。這是實現我所需要的還是更高效的一種好方法?

回答

2

這是少數定時器/線程的合理方法。對於很多人來說,你需要使用一個定時器來設置間隔的最大公分母,並讓它選擇適當的任務(如果有的話)來啓動。

使用Windows計劃任務幾乎肯定是矯枉過正。

+0

我同意派遣任務的單個計時器。如果您需要在特定的時間(例如一分鐘內)啓動,那麼您的計時器間隔需要足夠小以檢測分辨率要求(例如一秒內)內的微小變化。 –

0

我喜歡用一個帶有ResetEvent(手動或自動)的單線程(或線程池線程),並將超時設置爲最快任務的某個部分(比如說5秒)。外部可以調用事件來處理待處理的分派,或者每次超時時也可以檢查待處理的分派。

如果您將超時設置爲最小間隔的一小部分(例如30%),那麼您可以對「檢查」過程花費多少時間進行體面控制,但是如果錯過了一個間隔,分派任務的時間。它也爲您提供合理啓動的窗口。

實現可以通過維護一個有序列表,其中api調用接下來需要發生,並將超時設置爲其中的一部分。

+0

...或者一大堆時間:-)堆不會那麼多;我想我甚至更多地使用了三元樹。 –

+0

哈哈!好點子。訂單清單絕對有其他選擇。 – GrayWizardx

相關問題