簡體   English   中英

C#計時器-測量時間較慢

[英]C# Timer — measuring time slower

我正在寫一個代碼,其中:

一世。)

用戶在運行時添加“事件”。 (到flowlayoutpanel)在經過“ x”時間並且將LED轉向功能寫入Led-function.cs類之后,這些事件正在打開/關閉某些LED。 即:1)在3500ms之后左導通2)在4000ms之后右導通

II。)

當用戶點擊啟動時,計時器開始計時。

            // Create timer.
        System.Timers.Timer _timer;
        _timer = new System.Timers.Timer();
        _timer.Interval = (1);
        _timer.Elapsed += (sender, e) => { HandleTimerElapsed(LedObject, device, _timer); };
        _timer.Start();

III。)計時器的滴答事件每毫秒引發一次,並檢查是否已超過用戶定義的時間。 我會在每個滴答事件中通過將+1加到一個整數來測量經過時間。 (NumberOfTicks ++;)

        //Timer Handle
    private void HandleTimerElapsed(Led_Functions LedObject, string device, System.Timers.Timer _timer)
    {

        NumberOfTicks++;
        if (NumberOfTicks >= Start_time[0])
        {
            LedObject.LeftLED_ONnobutton(device);
        }
    }

IV。)我注意到的是,將滴答聲設置為1時。(因此,滴答聲事件每毫秒發生一次)即使將evet設置為3000ms,LED也會實際閃爍約6秒。 將刻度設置為100時(每隔0,1秒),則閃光更為精確(約3,5秒)。

任何想法,為什么我有這個時間延遲? 還是您有任何想法如何更好地實施?

謝謝!

1ms對於CPU來說是一個很小的間隔。 您不能確保每1毫秒調用一次代碼,尤其是在系統需要處理大量工作時。

更好的工具是使用DateTime.Now - startTime來獲取時間跨度或使用Stopwatch

private Stopwatch stopwatch = new Stopwatch();
// start the stopwatch:
stopwatch.Start();
// Timer Handle:
numberOfTicks = stopwatch.ElapsedMilliseconds;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM