欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#定時器Timer實現(xiàn)精確到1-2毫秒以內(nèi)

 更新時間:2024年12月02日 08:53:49   作者:小碼編匠  
最近在排查項目OTA的一個問題,觸發(fā)了一毫秒或者2毫秒執(zhí)行一次進(jìn)程間通信的,導(dǎo)致通信阻塞的問題,這樣就需要用到模擬觸發(fā)1ms或者2ms觸發(fā)事件,所以本文給大家介紹了C#?定時器?Timer?如何精確到?1-2?毫秒以內(nèi),需要的朋友可以參考下

前言

最近在排查項目OTA的一個問題,觸發(fā)了一毫秒或者2毫秒執(zhí)行一次進(jìn)程間通信的,導(dǎo)致通信阻塞的問題。這樣就需要用到模擬觸發(fā)1ms或者2ms觸發(fā)事件。

正文

這讓我第一時間想到了C#的定時器。

由于我們項目用到的框架是基于.NET Framwork 4.8 的,所以我就建立了一個.NET Framwork 4.8 的 WPF Demo 去驗證。

 private Timer timer;

 private void TimerTest_OnClick(object sender, RoutedEventArgs e)
 {
     timer = new Timer();
     timer.Interval = 1;
     timer.Elapsed += Timer_Elapsed;
     timer.Start();
 }

 private void Timer_Elapsed(object? sender, ElapsedEventArgs e)
 {
     Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));
 }

Demo很簡單, 就是創(chuàng)建一個按鈕,創(chuàng)建一個System.Timers.Timer,點擊后執(zhí)行,

但是執(zhí)行結(jié)果,卻是要等待10+ms,跟我們設(shè)置的1ms的間隔不符合

其實這跟PC的時鐘相關(guān),具體我就不解釋了,詳看上面鏈接的說明

我還不死心,會不會跟Dotnet的版本有關(guān)呢?

于是乎,我又創(chuàng)建了一個.Net8的 WPF的應(yīng)用,用了如上一樣的代碼,也是用到了 相同命名空間的Timer

using Timer = System.Timers.Timer;

測試的結(jié)果,發(fā)現(xiàn)竟然可以精確到1-2ms的誤差之內(nèi)

這應(yīng)該是微軟對.NET 8.0的 Timer 定時器做了優(yōu)化了。

接下來如何在.NET Framwork 4.8的環(huán)境下,實現(xiàn)精確度在1-2ms的定時執(zhí)行了,只能自己寫一個自旋的定時器,通過判斷時間的間隔方式執(zhí)行檢測。

private CancellationTokenSource tokenSource = new CancellationTokenSource();

private void SelfAutoTimer()
{
    Task.Run(() =>
    {
        var current = DateTime.Now;

        while (!tokenSource.IsCancellationRequested)
        {
            var temp = DateTime.Now;
            if ((temp - current).TotalMilliseconds >=1)
            {
                Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fff"));
                current = temp;
            }
        }
    });
}

測試的結(jié)果跟.Net8.0的Timer的效果一樣的,精確度在1-2ms之內(nèi)

接下來的項目應(yīng)該都需要往.NET 8里邊遷移才行了,可以減少很多不必要的工作量。

總結(jié)

C#中實現(xiàn)高精度定時器(1-2毫秒以內(nèi))是一個具有挑戰(zhàn)性的任務(wù),因為標(biāo)準(zhǔn)的 System.Timers.Timer 和 System.Threading.Timer 通常只能提供大約15毫秒左右的精度。

最后

到此這篇關(guān)于C#定時器Timer實現(xiàn)精確到1-2毫秒以內(nèi)的文章就介紹到這了,更多相關(guān)C# Timer精確1-2毫秒以內(nèi)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論