1
A
回答
4
我不會用線程方法。雖然睡眠線程不消耗用戶CPU時間,但它確實使用內核/系統CPU時間。其次,在.NET中,您無法調整線程的堆棧大小。所以,即使它只是在睡眠,你仍然堅持2MB的命中(我相信這是一個新線程的默認堆棧大小)。
使用System.Threading.Timer。它使用高效的計時器隊列。它可以擁有數百個輕量級定時器,並且只能在所有定時器之間重用的1個線程上執行(假定大多數定時器不同時觸發)。
0
當線程休眠時,它不消耗CPU使用。一個非常簡單的方法是讓一個線程休眠到DateTime。例如,
DateTime future = DateTime.Now.Add(TimeSpan.FromSeconds(30));
new Thread(() =>
{
Thread.Sleep(future - DateTime.Now);
//RaiseEvent();
}).Start();
這基本上說,將來會有一個日期(從現在起三十秒)。然後創建一個線程,睡眠時間的差異。然後舉起你的活動。
編輯:添加一些關於定時器的更多信息。定時器沒有問題,但我認爲這可能是更多的工作。你可以有一個間隔時間差的計時器。這會在時間趕上日期時間對象時觸發滴答事件。 另一種我不會推薦的方法,我似乎認爲你有這個,但每五秒鐘就會有一個計時器,並檢查時間是否匹配。我會避免這種做法,並堅持讓線程睡覺,直到有工作要做。
0
計時器可能並不是一個壞的方法。只需使用DateTime.Now來檢測它是否超過了目標時間。不要使用==,除非您嘗試將時間歸一化爲分鐘或小時等。
相關問題
- 1. 哪個是檢查時間戳/日期時間是否屬於指定日期的最佳方法
- 2. Thymeleaf - 格式化時檢查NULL的最佳做法(即日期)
- 3. 定期運行檢查的最佳方法是什麼?
- 4. 如何檢查日期是否發生?
- 5. Mysql檢查日期和插入分期付款的最佳方法
- 6. 按日期最佳方法視圖
- 7. 檢查XML元素的最佳方法
- 8. 檢查新鳴叫的最佳方法
- 9. 在TSQL中檢查兩個日期時間是否在同一日曆日的最佳方法是什麼?
- 10. 什麼是檢查基類指針類型的最佳方法?
- 11. 檢查指針是否已初始化的最佳方法
- 12. PostgresSQL檢查日期和發生錯誤
- 13. Makefile命令後檢查日誌的最佳方法
- 14. 定義Java常量日期的最佳方法
- 15. 在日期時間字段上存儲唯一日期的最佳方法?
- 16. 將日期時間日期翻譯成其他語言的最佳方法
- 17. 將日期字段複製到日期時間的最佳方法?
- 18. 在SQL中比較時間(或日期)的最佳方法?
- 19. 解決日期時間許可證問題的最佳方法
- 20. JavaScript日期:處理夏令時的最佳方法是什麼?
- 21. 在兩個日期之間查找日期(最佳做法)
- 22. 如何查找在特定日期發生的所有日期時間?
- 23. 檢測日期是否發生變化的最有效方法是什麼?
- 24. 查找特定事件發生的最早日期
- 25. 的XQuery:最快的方法來檢查日期
- 26. 將DateTime綁定到單獨的日期和時間字段的最佳方法?
- 27. 比較最近在JS中的日期的最佳方法?
- 28. 檢查mysql的持續時間的最佳方法
- 29. 什麼是檢查時間是否在一定時間內的最佳方法?
- 30. 檢查日期範圍的最快方法
當您的應用程序被告知退出時(如果退出發生在時間發生之前),會長時間睡眠的線程會幹乾淨淨地死掉嗎? – 2008-10-16 01:50:44
使用ManualResetEvent可以模擬當您希望退出應用程序時非常敏感的睡眠模式。 myEvent.WaitOne(未來 - Datetime.now) ... 然後從你的主線程,當你想退出,只是myEvent.Set ... 如果線程超時,你有你的時間..如果它被解僱,你正在退出 – 2009-06-18 23:07:05