简介
这篇文章是说明如何使用C#做高精度的计时器,有些时候,我们会需要用到精准度更高的计时器及Sleep,但Sleep的精准度并不高
因此只好自己客制化了
背景
在一般的系统中,Sleep(1)其实是相当于15.625ms(1/64秒),也就是说Sleep(15)以下都是Sleep一样的时间.
源码
说明
QueryPerformanceFrequency:可以取得每秒CPU的Performance Tick
QueryPerformanceCounter:可以取得CPU运行到现在的Tick数
在这个程式范例中,我自行写了一个AccurateSleep,这个函数的目的是因为Sleep的精准度只有15.625毫秒
如果只有计时器精准,但是Sleep却不精准,那怎么样也无法测出15.625毫秒以下的精准度
但是如果仅用while loop做等待,那却会造成程式无回应,因此在回圈中,需要再处理Windows的讯息,避免程式无回应