System.Threading.Timer低级实现

时间:2016-08-19 18:21:27

标签: .net multithreading clr

我试图了解System.Threading.Timer或.net中的计时器如何以低级别的方式运行。我想要得到的是概述。

我的疑问是,计时器一旦执行,一个线程或进程总是运行,如何通知时间结束,它是否接收到时钟或PIT或其他东西的中断?如果并非总是在运行,那么如果有一段时间可能线程或进程没有运行,那么时间是如何正确的。

2 个答案:

答案 0 :(得分:2)

使用线程会起作用,但效率非常低。

定时器只是数据结构。有一个.NET端数据结构和一个内核数据结构。内核知道如何在截止日期到期时通知线程。线程不必坐在那里等待。 (稍微简化一下。)

有一个基于.NET的优化层,它试图创建尽可能少的内核定时器,以使定时器更便宜。基本上,所有计时器都在队列中。当最早的 .NET计时器耗尽时,会有一个内核计时器。

计时器真的很便宜。

答案 1 :(得分:0)

我不知道它的确切实现,但我想它会启动一个新线程,记录当前系统tickcount并设置一个循环,其中起始tickcount与当前tickcount进行比较。当它达到设定的间隔时,它会引发一个事件,基本上是一个回调。在较低级别,它使用指针调用其范围之外的函数。

计时器不精确到毫秒。我认为分辨率大约是15ms。

我不完全确信这是否真的如此,所以我希望你能得到更多答案。