首页 > 编程语言 >在C#中,使用 Stopwatch 比较简单粗糙的替代 WIN32 下 C++ 中调用的 QueryPerformanceCounter

在C#中,使用 Stopwatch 比较简单粗糙的替代 WIN32 下 C++ 中调用的 QueryPerformanceCounter

时间:2024-12-22 21:30:37浏览次数:5  
标签:Start C# ts C++ WIN32 stopWatch Stopwatch Restart

C# 中自带的那个 CTimer 看上去是通过消息事件方式的,精度上好像小于10ms 就不行了。

于是找了半天网络,有的方式是引用 kernel32.dll 的库,然后就可以在 C# 中调用 QueryPerformanceCounter。感觉是不那么优雅。

最后居然发现这个 Stopwatch。真的像 一个计时器一样,按一下,开始【Stopwatch.Start()】,再按一下暂停【Stopwatch.Stop()】,再按一下又继续【Stopwatch.Start()】,另一个按钮按一下就重新开始【Stopwatch.Restart()】。

而且的,真的很准的,说是可精确到 1ms。这对我来说是够了,我看了一下 Stopwatch.Frequency,也就是 我这电脑支持的 每秒多少 ticks,是10000000。这个类还提供了一个 IsHighResolution,供你判断你的硬件系统是否支持高精度。我的本本支持。

这里贴一段代码简单说明:

static void test2()
{
	Stopwatch stopWatch = new Stopwatch();
	stopWatch.Restart();
	Thread.Sleep(1000);

	// Get the elapsed time as a TimeSpan value.

	TimeSpan ts = stopWatch.Elapsed;
	double m1 = stopWatch.ElapsedMilliseconds; //这里显示的时 Start() 或 Restart() 后开始的累计毫秒,Start()后若 Stop()了再 Start(),还是一样继续累计的。Restart() 才会重新开始累计。
	double m2 = ts.Milliseconds; //这只是当前毫秒值,不是累计值
	double m3 = ts.TotalMilliseconds; //这与 m1 一样
	double t = ts.Ticks; 
	// Format and display the TimeSpan value.
	string elapsedTime = String.Format("m1:{0}, m2:{1}, m3:{2}, ticks:{3}", m1, m2, m3, t);
	Console.WriteLine("RunTime " + elapsedTime);
	stopWatch.Restart();

	Thread.Sleep(3000);
	elapsedTime = String.Format("ElapsedMilliseconds: {0}", stopWatch.Elapsed.TotalMilliseconds);
	Console.WriteLine("RunTime " + elapsedTime);

	stopWatch.Stop();
}

标签:Start,C#,ts,C++,WIN32,stopWatch,Stopwatch,Restart
From: https://www.cnblogs.com/pencilstart/p/18622583

相关文章

  • 豆包MarsCode:小U的数字插入问题
    问题描述问题分析问题的核心是找到将数字b插入到数字a的某个位置后,使形成的数字尽可能大。需要仔细分析以下几个要点:1.分析数字的特性输入的两个数字:a是一个正整数(例如76543)。b是一个非负整数(例如4)。目标:将b插入a的某个位置后,获得最大的数字。2.数......
  • React+TypeScript+Tailwind 实现圣诞祝福网页
    圣诞节快要到啦,提前祝大家圣诞节快乐!!!项目完整源码在最后哦✨视频(一):项目环境搭建在这个教程中,我们将一步步创建一个精美的圣诞祝福网页。本文是系列的第一部分,我们将完成项目的环境搭建。环境准备1.Node.js安装访问Node.js官网下载并安装LTS(长期支持)版本验......
  • Java转C++之模板元编程
    模板元编程(TemplateMetaprogramming)入门指南:针对Java程序员的讲解作为一个从Java转到C++的程序员,理解模板元编程(TemplateMetaprogramming,简称TMP)可能会感到有些挑战,特别是其中的语法和概念有很多与Java非常不同的地方。模板元编程是一种强大的技术,它允许我们在编译时......
  • MFC/C++学习系列之简单记录1——错误解决与Dialog移植
    MFC/C++学习系列之简单记录1前言MFCapplication已停止工作Dialog移植MFC中的去边框设置总结前言最近接触MFC,接手一个项目,基于MFC架构编写的,在跑通代码的过程中出现的问题进行简单记录。MFCapplication已停止工作在代码移植过程中,直接build代码,提示MFCapplicat......
  • halcon单相机+工业机器人=模板匹配抓取过程原理及代码实现
    先来看看包含哪些流程1.1相机拍照到的工作台物体到机器人底座间的转换关系1,单相机自身的相机内参的标定得到相机的内参cameraparam2,进行手眼标定,用眼在手外,得到camerainbasepose相机相对于工业机器人底座的位姿3,由标定板确定工作台面与相机的位姿关系objincamerapo......
  • MFC/C++学习系列之简单记录8——消息映射
    MFC/C++学习系列之简单记录8——消息映射前言消息映射机制DoDataExchange函数BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏与WPF对比总结前言每天学习一点MFC的小知识!消息映射机制说起来很高大上,其实就是前端界面控件和后台代码命名的绑定。当前端控件执行某些操......
  • 实验6 C语言结构体、枚举应用编程
    实验任务四:task4.c源代码:1#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];//isbn号6charname[80];//书名7charauthor[80];//作者8doublesales_price;//售价9int......
  • [CF1965F] conference
    题意:有\(n\)个讲师,对于讲师\(i\),他可以在\([l_i,r_i]\)中选一天讲课,问对于\(x\in[1,n]\),有多少连续的\(x\)天可以做到都有讲师讲课。先考虑区间的\(l\)互不相同时如何解决。对于已知的\([l,r]\)是否存在完美匹配,判断是简单的,我们贪心地按天数从左往右依次解决,每次......
  • Scale AI公司的平台:Outlier平台;Remotows平台
    ScaleAI公司Scale指的是ScaleAI公司,是一家总部位于加利福尼亚州旧金山的人工智能公司.以下是关于它的一些信息:做小规模大模型LLMs发展历程2016年成立,最初致力于为自动驾驶汽车等应用创建标记数据集,通过构建数据管道和标注技术,在人工智能模型训练领域崭露头角.2019......
  • CW信号的正交解调
    1.CW信号  CW可以叫做等幅电报,它通过电键控制发信机产生短信号"."(点)和长信号"--"(划),并利用其不同组合表示不同的字符,从而组成单词和句子。  CW信号可以看作一种幅度调制信号,类似于幅移键控(2ASK信号)其携带的信息保存在其幅度中,通过改变载波的幅度来实现基带数据的传输。其函......