|
44
|
| Alan · 技术社区 · 16 年前 |
|
|
1
32
System.Threading.Timer 我有投票权。 system.timers.timer用于基于服务器的(您的代码在主机上作为服务器/服务运行,而不是由用户运行)计时器功能。 一个带有while循环和thread.sleep命令的线程,考虑到.NET中存在更强大的计时器机制,这确实是一个坏主意。 |
|
|
2
23
Server Timers 是一种不同于睡眠线程的生物。
首先,根据线程的优先级以及其他正在运行的内容,休眠线程可能会被唤醒,也可能不会按您要求的时间间隔运行。如果间隔足够长,并且调度的精度并不重要,
另一方面,计时器可以在任何线程上引发事件,从而实现更好的调度功能。但是,使用计时器的成本在代码中稍微复杂一点,而且您可能无法控制哪个线程运行计时器事件触发的逻辑。来自文档:
另一个考虑因素是计时器在线程池线程上调用其经过的委托。根据逻辑的耗时和/或复杂程度,您可能不想在线程池中运行它—您可能需要一个专用的线程。计时器的另一个因素是,如果处理时间足够长,则可能会在另一个线程上再次(同时)引发计时器事件-如果正在运行的代码不是为了并发而设计或构造的,则这可能是一个问题。 不要混淆 服务器计时器 用“ Windows Timers “。后者通常指的是可以传递到窗口的wm_计时器消息,允许应用程序在其主线程上调度和响应定时处理,而不需要休眠。但是,Windows计时器也可以引用 Win API for low-level timing (与wm_计时器不同)。 |
|
|
3
21
既不:
睡觉通常是不受欢迎的(不幸的是,我记不起细节,但首先,它是一个不可中断的“障碍”),以及
使用一个
希望这有帮助:) |
|
4
1
我发现唯一真正可伸缩的计时器实现是
|
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 1 年前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 1 年前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 1 年前 |
|
|
András Takács · Python多线程问题 2 年前 |
|
|
András Takács · Python多线程错误 2 年前 |