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