日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#精准定时

發(fā)布時(shí)間:2023/12/10 C# 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#精准定时 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 簡(jiǎn)介
  • StopWatch類
  • 例子1,用作延時(shí)
  • 例子2,用作算法耗時(shí)評(píng)估

  • 博主寫作不容易,孩子需要您鼓勵(lì)
  • 萬水千山總是情 , 先點(diǎn)個(gè)贊行不行

簡(jiǎn)介

我們?cè)谧詣?dòng)化上位機(jī)編寫過程中,上位機(jī)的定時(shí)應(yīng)用在很多地方。對(duì)于工業(yè)上位機(jī)程序設(shè)計(jì)起到非常關(guān)鍵的作用,比如:評(píng)估算法耗時(shí);動(dòng)作延時(shí)等等。

那我們?nèi)绾螌?shí)現(xiàn)這一功能呢?C#為我們提供了一個(gè)StopWatch定時(shí)器,我們可以借助此定時(shí)器進(jìn)行定時(shí)。

有的人可能會(huì)問,為什么不用Sleep,因?yàn)檫@種延時(shí)方法定時(shí)精度差,并且會(huì)卡死線程與程序。最主要的是定時(shí)精度差

StopWatch類

StopWatch類定義如下:

namespace System.Diagnostics { // // 摘要: // 提供一組方法和屬性,可用于準(zhǔn)確地測(cè)量運(yùn)行時(shí)間。 public class Stopwatch { // // 摘要: // 獲取以每秒計(jì)時(shí)周期數(shù)表示的計(jì)時(shí)器頻率。此字段為只讀。 public static readonly long Frequency; // // 摘要: // 指示計(jì)時(shí)器是否基于高分辨率性能計(jì)數(shù)器。此字段為只讀。 public static readonly bool IsHighResolution; // // 摘要: // 初始化 System.Diagnostics.Stopwatch 類的新實(shí)例。 public Stopwatch(); // // 摘要: // 獲取當(dāng)前實(shí)例測(cè)量得出的總運(yùn)行時(shí)間。 // // 返回結(jié)果: // 一個(gè)只讀的 System.TimeSpan,用于表示當(dāng)前實(shí)例測(cè)量得出的總運(yùn)行時(shí)間。 public TimeSpan Elapsed { get; } // // 摘要: // 獲取當(dāng)前實(shí)例測(cè)量得出的總運(yùn)行時(shí)間(以毫秒為單位)。 // // 返回結(jié)果: // 一個(gè)只讀長整型,表示當(dāng)前實(shí)例測(cè)量得出的總毫秒數(shù)。 public long ElapsedMilliseconds { get; } // // 摘要: // 獲取當(dāng)前實(shí)例測(cè)量得出的總運(yùn)行時(shí)間(用計(jì)時(shí)器計(jì)時(shí)周期表示)。 // // 返回結(jié)果: // 一個(gè)只讀長整型,表示當(dāng)前實(shí)例測(cè)量得出的計(jì)時(shí)器計(jì)時(shí)周期的總數(shù)。 public long ElapsedTicks { get; } // // 摘要: // 獲取一個(gè)指示 System.Diagnostics.Stopwatch 計(jì)時(shí)器是否在運(yùn)行的值。 // // 返回結(jié)果: // 如果 System.Diagnostics.Stopwatch 實(shí)例當(dāng)前正在運(yùn)行,并且在對(duì)某個(gè)時(shí)間間隔的運(yùn)行時(shí)間進(jìn)行測(cè)量,則該值為 true;否則為 false。 public bool IsRunning { get; } // // 摘要: // 獲取計(jì)時(shí)器機(jī)制中的當(dāng)前最小時(shí)間單位數(shù)。 // // 返回結(jié)果: // 一個(gè)長整型,表示基礎(chǔ)計(jì)時(shí)器機(jī)制中的計(jì)時(shí)周期計(jì)數(shù)器值。 public static long GetTimestamp(); // // 摘要: // 對(duì)新的 System.Diagnostics.Stopwatch 實(shí)例進(jìn)行初始化,將運(yùn)行時(shí)間屬性設(shè)置為零,然后開始測(cè)量運(yùn)行時(shí)間。 // // 返回結(jié)果: // 剛剛開始測(cè)量運(yùn)行時(shí)間的 System.Diagnostics.Stopwatch。 public static Stopwatch StartNew(); // // 摘要: // 停止時(shí)間間隔測(cè)量,并將運(yùn)行時(shí)間重置為零。 public void Reset(); // // 摘要: // 停止時(shí)間間隔測(cè)量,將運(yùn)行時(shí)間重置為零,然后開始測(cè)量運(yùn)行時(shí)間。 public void Restart(); // // 摘要: // 開始或繼續(xù)測(cè)量某個(gè)時(shí)間間隔的運(yùn)行時(shí)間。 public void Start(); // // 摘要: // 停止測(cè)量某個(gè)時(shí)間間隔的運(yùn)行時(shí)間。 public void Stop(); } }

使用StopWatch類注意問題:

1、StopWatch類在System.Diagnostics 命名空間下,在使用StopWatch的文件中要添加using System.Diagnostics;

2、常用函數(shù): public Stopwatch();public void Reset();public void Start();public void Restart();public void Stop();

3、public void Restart();相當(dāng)于public void Reset();+public void Start();

使用StopWatch定時(shí)方法:

1、定義一個(gè)StopWatch對(duì)象

Stopwatch sw = new Stopwatch();

2、開始計(jì)時(shí)

sw.Start();

3、重新設(shè)置并開始計(jì)時(shí)

sw.Restart();

4、結(jié)束計(jì)時(shí)

sw.Stop();

5、獲取運(yùn)行時(shí)間[毫秒]

long times = sw.ElapsedMilliseconds;

我們?cè)诔绦蛑锌梢耘袛噙\(yùn)行時(shí)間是否達(dá)到我們需要的延時(shí)時(shí)間,如果時(shí)間達(dá)到,則程序往下運(yùn)行。這樣就達(dá)到定時(shí)目的。
在進(jìn)行算法評(píng)估時(shí)候,我們?cè)谒惴ㄩ_始的時(shí)候打開定時(shí)器,程序結(jié)束時(shí)停止定時(shí)器,之后獲取定時(shí)器運(yùn)行時(shí)間,即可得到算法運(yùn)行時(shí)間。

Stopwatch 在基礎(chǔ)計(jì)時(shí)器機(jī)制中對(duì)計(jì)時(shí)器的計(jì)時(shí)周期進(jìn)行計(jì)數(shù),從而測(cè)量運(yùn)行時(shí)間。 如果安裝的硬件和操作系統(tǒng)支持高分辨率性能計(jì)數(shù)器,則 Stopwatch 類將使用該計(jì)數(shù)器來測(cè)量運(yùn)行時(shí)間; 否則,Stopwatch 類將使用系統(tǒng)計(jì)數(shù)器來測(cè)量運(yùn)行時(shí)間。 使用 Frequency 和 IsHighResolution 字段可以確定實(shí)現(xiàn) Stopwatch 計(jì)時(shí)的精度和分辨率。

例子1,用作延時(shí)

Stopwatch sw = new Stopwatch(); //開始計(jì)時(shí) sw.Start(); //某算法 Funcation(); //判斷延時(shí)是否到達(dá) if (sw.ElapsedMilliseconds>10) {Funcation1();//到達(dá)則運(yùn)行函數(shù)1 } //否則運(yùn)行函數(shù)2 elseFuncation2();//結(jié)束計(jì)時(shí) sw.Stop();

也可以使用Switch Case進(jìn)行延時(shí)操作。定時(shí)器開始后轉(zhuǎn)到下一步Case進(jìn)行判斷即可。

例子2,用作算法耗時(shí)評(píng)估

Stopwatch sw = new Stopwatch(); //開始計(jì)時(shí) sw.Start(); //某算法 Function(); //結(jié)束計(jì)時(shí) sw.Stop(); //獲取運(yùn)行時(shí)間[毫秒] long times = sw.ElapsedMilliseconds; TextBox1.Text += "執(zhí)行算法總共使用了" + times + "毫秒";
  • 博主簡(jiǎn)介:
  • 工業(yè)自動(dòng)化上位機(jī)軟件工程師、機(jī)器視覺算法工程師、運(yùn)動(dòng)控制算法工程師。目前從業(yè)于智能制造自動(dòng)化行業(yè)。 博主郵箱:2296776525@qq.com
  • 幫忙點(diǎn)個(gè)贊吧。哈哈。

總結(jié)

以上是生活随笔為你收集整理的C#精准定时的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。