C#精准定时

文章目录

  • 简介
  • StopWatch类
  • 例子1,用作延时
  • 例子2,用作算法耗时评估

  • 博主写作不容易,孩子需要您鼓励
  • 万水千山总是情 , 先点个赞行不行

简介

我们在自动化上位机编写过程中,上位机的定时应用在很多地方。对于工业上位机程序设计起到非常关键的作用,比如:评估算法耗时;动作延时等等。

那我们如何实现这一功能呢?C#为我们提供了一个StopWatch定时器,我们可以借助此定时器进行定时。

有的人可能会问,为什么不用Sleep,因为这种延时方法定时精度差,并且会卡死线程与程序。最主要的是定时精度差

StopWatch类

StopWatch类定义如下:

namespace System.Diagnostics  
{  //  // 摘要:  //     提供一组方法和属性,可用于准确地测量运行时间。  public class Stopwatch  {  //  // 摘要:  //     获取以每秒计时周期数表示的计时器频率。此字段为只读。  public static readonly long Frequency;  //  // 摘要:  //     指示计时器是否基于高分辨率性能计数器。此字段为只读。  public static readonly bool IsHighResolution;  //  // 摘要:  //     初始化 System.Diagnostics.Stopwatch 类的新实例。  public Stopwatch();  //  // 摘要:  //     获取当前实例测量得出的总运行时间。  //  // 返回结果:  //     一个只读的 System.TimeSpan,用于表示当前实例测量得出的总运行时间。  public TimeSpan Elapsed { get; }  //  // 摘要:  //     获取当前实例测量得出的总运行时间(以毫秒为单位)。  //  // 返回结果:  //     一个只读长整型,表示当前实例测量得出的总毫秒数。  public long ElapsedMilliseconds { get; }  //  // 摘要:  //     获取当前实例测量得出的总运行时间(用计时器计时周期表示)。  //  // 返回结果:  //     一个只读长整型,表示当前实例测量得出的计时器计时周期的总数。  public long ElapsedTicks { get; }  //  // 摘要:  //     获取一个指示 System.Diagnostics.Stopwatch 计时器是否在运行的值。  //  // 返回结果:  //     如果 System.Diagnostics.Stopwatch 实例当前正在运行,并且在对某个时间间隔的运行时间进行测量,则该值为 true;否则为 false。  public bool IsRunning { get; }  //  // 摘要:  //     获取计时器机制中的当前最小时间单位数。  //  // 返回结果:  //     一个长整型,表示基础计时器机制中的计时周期计数器值。  public static long GetTimestamp();  //  // 摘要:  //     对新的 System.Diagnostics.Stopwatch 实例进行初始化,将运行时间属性设置为零,然后开始测量运行时间。  //  // 返回结果:  //     刚刚开始测量运行时间的 System.Diagnostics.Stopwatch。  public static Stopwatch StartNew();  //  // 摘要:  //     停止时间间隔测量,并将运行时间重置为零。  public void Reset();  //  // 摘要:  //     停止时间间隔测量,将运行时间重置为零,然后开始测量运行时间。  public void Restart();  //  // 摘要:  //     开始或继续测量某个时间间隔的运行时间。  public void Start();  //  // 摘要:  //     停止测量某个时间间隔的运行时间。  public void Stop();  }  
}  

使用StopWatch类注意问题:

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

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

3、public void Restart();相当于public void Reset();+public void Start();

使用StopWatch定时方法:

1、定义一个StopWatch对象

Stopwatch sw = new Stopwatch(); 

2、开始计时

sw.Start();  

3、重新设置并开始计时

sw.Restart();  

4、结束计时

sw.Stop();  

5、获取运行时间[毫秒]

long times = sw.ElapsedMilliseconds;  

我们在程序中可以判断运行时间是否达到我们需要的延时时间,如果时间达到,则程序往下运行。这样就达到定时目的。
在进行算法评估时候,我们在算法开始的时候打开定时器,程序结束时停止定时器,之后获取定时器运行时间,即可得到算法运行时间。

Stopwatch 在基础计时器机制中对计时器的计时周期进行计数,从而测量运行时间。 如果安装的硬件和操作系统支持高分辨率性能计数器,则 Stopwatch 类将使用该计数器来测量运行时间; 否则,Stopwatch 类将使用系统计数器来测量运行时间。 使用 Frequency 和 IsHighResolution 字段可以确定实现 Stopwatch 计时的精度和分辨率。

例子1,用作延时

Stopwatch sw = new Stopwatch();  
//开始计时  
sw.Start(); 
//某算法
Funcation();
//判断延时是否到达
if (sw.ElapsedMilliseconds>10)
{Funcation1();//到达则运行函数1
}
//否则运行函数2
elseFuncation2();//结束计时  
sw.Stop();    

也可以使用Switch Case进行延时操作。定时器开始后转到下一步Case进行判断即可。

例子2,用作算法耗时评估

Stopwatch sw = new Stopwatch();  
//开始计时  
sw.Start(); 
//某算法
Function();
//结束计时  
sw.Stop();  
//获取运行时间[毫秒]  
long times = sw.ElapsedMilliseconds;  
TextBox1.Text += "执行算法总共使用了" + times + "毫秒";  
  • 博主简介:
  • 工业自动化上位机软件工程师、机器视觉算法工程师、运动控制算法工程师。目前从业于智能制造自动化行业。 博主邮箱:2296776525@qq.com
  • 帮忙点个赞吧。哈哈。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

联合体(union)和结构体(struct)的区别

1. 联合说明和联合变量定义 联合也是一种新的数据类型, 它是一种特殊形式的变量。 联合说明和联合变量定义与结构十分相似。其形式为: union 联合名{ 数据类型 成员名; 数据类型 成员名; ... } 联合变量名; 联合表示几个变量公用一个内存位置, 在不同的时间保存不同…

MVC架构简介及其测试策略

最近在WEB端测试工作中陷入了瓶颈,单纯的手动功能测试在没有成熟的代码规范之前还是很容易坑的,WEB自动化测试一时半会还没有什么进展,所以决定先学习一下网站用的MVC架构,跟着教程写了一个小网站,大概也找到了WEB测试…

prototype与_proto_

1、prototype与_proto_ ①prototype:是函数才有的属性,这个属性是一个指针。当一个构造函数被创建时,该构造函数会自动生成一个prototype指针,该指针指向构造函数的原型。这个原型会有其他实例共享的一些属性和方法。 ②_proto_&a…

Halcon求取矩形顶点坐标

文章目录简介Halcon源码博主写作不容易,孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 我们在使用Halcon画矩形时,并不能得到矩形四角顶点坐标。但是我们可以通过数学计算得到矩形定点坐标的位置。 我们在计算过程中需要知道矩形的长轴与短…

kafka常用的shell命令

kafka常用shell命令: ------------------------------------ 1、创建topic bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test 2、查看创建的topic bin/kafka-topics.sh --list --zookeeper localhost:…

python+pycharm+Django报错

报错&#xff1a; Unhandled exception in thread started by <function wrapper at 0x2d7e410>Traceback (most recent call last):File "/root/virtual_dir/wxwebapp_court_nositepkg/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, i…

C++多线程实例(_beginThreadex创建多线程)

C多线程&#xff08;二&#xff09;(_beginThreadex创建多线程) C/C Runtime 多线程函数一 简单实例&#xff08;来自codeprojct&#xff1a;http://www.codeproject.com/useritems/MultithreadingTutorial.asp&#xff09; 主线程创建2个线程t1和t2&#xff0c;创建时2个线程…

halcon求取区域顶点

文章目录简介Halcon源代码处理效果博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 使用halcon求取顶点的方法。 Halcon源代码 read_image (Image1, 1.png)points_foerstner (Image1, 1, 2, 3, 200, 0.3, gauss, false, RowJunctions, …

从excel表中生成批量SQL,将数据录入到数据库中

excel表格中有许多数据&#xff0c;需要将数据导入数据库中&#xff0c;又不能一个一个手工录入&#xff0c;可以生成SQL&#xff0c;来批量操作。1.首先在第二行的H列&#xff0c;插入函数&#xff1a;CONCATENATE("INSERT INTO book (bookid, title, volume, author, u…

HDU-5895 Mathematician QSC

题目大意&#xff1a; 已知f[0] 0, f[1] 1, f[i] f[i-1] * 2 f[i-2]&#xff0c;且g[n] g[n-1] f[n] * f[n]&#xff0c;现在给出n&#xff0c;y&#xff0c;x&#xff0c;s&#xff0c;问你x^(g[n*y]) mod (s 1)的值为多少。 解题思路&#xff1a; 首先可以得到的是g[n…

C#的两种类据类型:值类型和引用类型

目录什么是值类型&#xff0c;什么是引用类型概念&#xff1a;值类型和引用类型区别什么是值类型&#xff0c;什么是引用类型 概念&#xff1a; 值类型直接存储其值&#xff0c;而引用类型存储对其值的引用。部署&#xff1a;托管堆上部署了所有引用类型。 引用类型&#xf…

ring0 ring3 kernel driver

intel cpu的权限访问控制&#xff1a;ring0 ~ ring5. window、linux操作系统都只用了ring0&#xff0c;ring3&#xff0c;对应内核态和用户态. 驱动程序工作在内核态&#xff0c;没有main函数入口&#xff0c;而应用程序工作在用户态。转载于:https://www.cnblogs.com/yiii/p/6…

Linux 的多线程编程的高效开发经验

转自&#xff1a;http://www.chineselinuxuniversity.net/articles/22615.shtml 本文中我们针对 Linux 上多线程编程的主要特性总结出 5 条经验&#xff0c;用以改善 Linux 多线程编程的习惯和避免其中的开发陷阱。在本文中&#xff0c;我们穿插一些 Windows 的编程用例用以对…

Visual C++中error spawning cl.exe解决办法

| 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 今天安装Vc6.0的时候出现了一个error spawning cl.exe的错误&#xff0c;在网上找了一些资料&#xff0c;才知道这是因为路径设置的问题引起的&#xff0c; “cl.exe”是VC真正的程序编译器&…

C#整数数据类型

文章目录博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 数据类型含义取值范围sbyte有符号8位整数-128 ~ 127&#xff08;-2^7 ~ 2^7-1&#xff09;byte无符号8位整数0 ~ 255&#xff08;0 ~ 2^8-1&#xff09;short有符号16位整数-32768 ~ 3…

HEXA机器人荣获CES Asia2018 创新奖

2019独角兽企业重金招聘Python工程师标准>>> 6月13日至15日&#xff0c;亚洲消费电子展CES Asia 2018将在上海新国际博览中心如期举行。在活动到来前&#xff0c;美国消费技术协会&#xff08;CTA&#xff09;于5月24日&#xff0c;提前揭晓了“2018亚洲消费电子展创…

【bzoj3994】[SDOI2015]约数个数和 莫比乌斯反演

题目描述 设d(x)为x的约数个数&#xff0c;给定N、M&#xff0c;求 输入 输入文件包含多组测试数据。 第一行&#xff0c;一个整数T&#xff0c;表示测试数据的组数。接下来的T行&#xff0c;每行两个整数N、M。输出 T行&#xff0c;每行一个整数&#xff0c;表示你所求的答案…

Linux根文件系统结构再认识

Linux根文件系统结构再认识刘建文&#xff08;http://blog.csdn.net/keminlau &#xff09; INTRO 尽管Linux的根文件系统在形式表现上是一体的&#xff08;所有数据目录均为根目录下的子目录&#xff09;&#xff0c;但实际它们是多个不同的【逻辑主体】&#xff08;为了实现…

C#浮点数据类型

文章目录博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 数据类型含义取值范围有效数字位数float32位浮点数1.5X10^-45 ~ 3.4X10^387double64位浮点数5.0X10^-324 ~ 1.7X10^30815 ~ 16 注意&#xff1a; 浮点数有一定的取值范围和有效数字限制…

在Window10上使用Ubuntu终端

在Windows10上使用Ubuntu终端 习惯了ubuntu的开发&#xff0c;回到windows的command可以说是很绝望了。之前偶尔用windows时一直用git-bash来代替。但是发现windows已经添加了对ubuntu子系统的支持&#xff0c;那直接用不是更爽。 1.安装 进入控制面板&#xff0c;开启适用于Li…