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

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

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

前言

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

正文

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

由于我們項(xiàng)目用到的框架是基于.NET Framwork 4.8 的,所以我就建立了一個(gè).NET Framwork 4.8 的 WPF Demo 去驗(yàn)證。

 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很簡(jiǎn)單, 就是創(chuàng)建一個(gè)按鈕,創(chuàng)建一個(gè)System.Timers.Timer,點(diǎn)擊后執(zhí)行,

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

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

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

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

using Timer = System.Timers.Timer;

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

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

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

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;
            }
        }
    });
}

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

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

總結(jié)

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

最后

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

相關(guān)文章

最新評(píng)論