.Net 中的计时器和循环准确吗?

2024-05-01

在开发一个程序时,计算555定时器IC产生的脉冲的频率和脉冲宽度,通过PC并行端口传到PC。我注意到每次运行代码时它都会显示不同的值,因此我开始测试循环和计时器的准确性。我运行了以下代码,发现它们不准确(我可能是错的,如果我错了,请纠正我!):

对于定时器:

    int sec = 0;
    private void button2_Click(object sender, EventArgs e)
    {
        sec = DateTime.Now.Second;
        i = 0;
        timer1.Enabled = true;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (sec == DateTime.Now.Second)
        {
            i++;
        }
        else
        {
            timer1.Enabled = false;
            MessageBox.Show(i.ToString(),"Timer Output");
        }
    }

OUTPUT:应该是一样的,但是:

对于循环:

    private void button1_Click(object sender, EventArgs e)
    {
        i = 0;
        CheckForIllegalCrossThreadCalls = false;
        Thread t1 = new Thread(LoopTest);
        t1.Start();
    }

    void LoopTest()
    {
        System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
        sw.Start();
        this.Cursor = Cursors.WaitCursor;
        while (true)
        {
            if (sw.ElapsedMilliseconds != 1000)
            {
                i++;
            }
            else
            {
                break;
            }
        }
        sw.Stop();
        this.Cursor = Cursors.Default;
        MessageBox.Show(i.ToString(), "Loop Output");
    }

OUTPUT:应该是一样的,但是:

我应该怎么做才能使循环和计时器准确,有什么方法可以做到吗?或者我必须去学习困难而复杂的C 代码和DOS?

我认为这是我在这个问题上得到错误价值观的根本原因:计算并行端口输入频率 - C# https://stackoverflow.com/questions/11499113/count-parallel-port-input-frequency-c-sharp


1)不要使用DateTime.Now对于性能测量,使用StopWatch.

2) "OUTPUT: Should be same, but .."

他们为什么要这么做?您正在非 RTOS(实时操作系统)上运行托管/JIT 代码。如果操作系统愿意的话,您的代码可以随时被退回。是什么让您相信在这种环境中运行相同的代码 N 次应该总是产生如此小的相同结果?

3) Windows 上的计时器的分辨率约为 15 毫秒。要获得非常准确的计时,最好的选择是支持它的系统 (CPU) 上的 HighPerformanceTimer API。您甚至没有向我们展示计时器的间隔。

您在这里没有考虑许多变量,并且您的预测基于错误的假设。您甚至测量了多少次此代码?您是否考虑了第一次编译所需的时间?您是否在发布模式下运行?通过VS?后台是否有很多任务在运行?我还可以继续说下去。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.Net 中的计时器和循环准确吗? 的相关文章

  • 异常堆栈跟踪不显示抛出异常的位置

    通常 当我抛出异常 捕获它并打印出堆栈跟踪时 我会看到抛出异常的调用 导致该异常的调用 导致该异常的调用that 依此类推回到整个程序的根 现在它只向我显示异常所在的调用caught 而不是它所在的地方thrown 我不明白是什么改变导致了
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • C 中“complex”的默认类型

    根据我读过的文档 C99 和更高版本的支持float complex double complex and long double complex作为复杂类型 但是 此代码在使用时编译时不会发出警告gcc Wall Wextra inclu
  • 为什么需要数字后缀?

    C 语言 我确信还有其他语言 需要在数字文字末尾添加后缀 这些后缀指示文字的类型 例如 5m是一个小数 5f是一个浮点数 我的问题是 这些后缀真的有必要吗 或者是否可以从上下文中推断出文字的类型 例如 代码decimal d 5 0应该推断
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 使用 OleDbCommandBuilder 时访问 SQL 语法错误

    我要在 C 中使用 OleDbDataAdapter 在 Access 数据库中插入数据 但收到错误消息INSERT INTO 命令中的语法错误 BackgroundWorker worker new BackgroundWorker Ol
  • doxygen c++:记录由“using”声明公开的私有继承成员

    作为一个例子 我有以下课程 class A public void methodOne class B private A public Brief description using A methodOne 我还没有找到强制 doxyge
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • EnumDisplayDevices 与 WMI Win32_DesktopMonitor,如何检测活动监视器?

    对于我当前的 C 项目 我需要为在大量计算机上连接并处于活动状态的每个监视器检测一个唯一的字符串 研究指出了两种选择 使用 WMI 并查询 Win32 DesktopMonitor 以获取所有活动监视器 使用 PNPDeviceID 来唯一
  • 为什么 f(i = -1, i = -1) 是未定义的行为?

    我正在读关于违反评估顺序 http en cppreference com w cpp language eval order 他们举了一个令我困惑的例子 1 如果标量对象上的副作用相对于同一标量对象上的另一个副作用是无序的 则行为未定义
  • 无法在 C# 中为 EventArgs 分配使用派生类型的事件处理程序

    所以我有一个事件声明如下 public event EventHandler OnChangeDetected 然后我有以下处理程序被分配给该事件 myObject OnChangeDetected OnTableChanged 我的理解是
  • 在 Windows CE 6.0 与 Windows Mobile 6.1 下进行开发的权衡是什么

    我有一个 Windows NET 应用程序 我计划将其 移植 并定制为移动设备 该应用程序由一个独立的 NET 程序组成 该程序与条形码扫描仪配合使用 具有简单的 UI 并将扫描结果记录到文件中 还有一个 Windows 服务 可以使用 W
  • rabbitmq 的 REST API

    有没有办法从 ajax 向 RabbitMQ 发送数据 我的应用程序由数千个 Web 客户端 用 js 编写 和 WCF REST 服务组成 现在我试图弄清楚如何为我的应用程序创建可扩展点 这个想法是有一个rabbitmq实例 它从放置在一
  • 有没有办法直接在函数参数中格式化字符串而不是使用临时字符串?

    我有一个接受字符串 字符数组 作为参数的函数 void enterString char my string 当使用这个函数时 我经常发现自己想要输入格式化的字符串 我使用 sprintf 来做到这一点 然而 我每次都必须创建一个临时字符串
  • 如果“嵌入式”SQL 2008 数据库文件不存在,如何创建它?

    我使用 C ADO Net 和在 Server Management Studio 中创建的嵌入式 MS SQL 2008 数据库文件 附加到 MS SQL 2008 Express 创建了一个数据库应用程序 有人可以向我指出一个资源 该资
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp
  • 嵌入式二进制资源 - 如何枚举嵌入的图像文件?

    我按照中的说明进行操作这本书 http www apress com book view 9781430225492 关于资源等的章节 我不太明白的是 如何替换它 images Add new BitmapImage new Uri Ima

随机推荐

  • 当vim进入可视模式时运行命令

    我使用一个小脚本来触发插入模式以更改行号颜色 function CursorLineNrColorInsert mode Insert mode blue if a mode i highlight CursorLineNr ctermfg
  • 如何编写操作系统程序? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Javascript 对象值的 Sum 数组

    我认为这是一个令人惊讶的常见和简单的问题 但我似乎找不到我要找的东西 如果我有 var array a 4 b 5 d 6 a 4 c 5 c 4 我如何对要得到的对象求和 a 8 b 5 c 9 d 6 使用下划线 lodash 或相当快
  • Linux 上的 头文件在哪里?为什么我找不到 ? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在Linux中实现C的getch 函数 https stackoverflow com questions 3276546 how to implement getch function of c
  • 多列下拉菜单[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个包
  • iOS 由于未捕获的异常“NSUnknownKeyException”而终止应用程序

    我对 Objective C 和 iOS 编程很陌生 并且遇到了这个非常奇怪的错误 相关应用程序使用我使用 NSObject 制作的自定义类型的一组预设值来初始化 NSMutableArray 这是由应用程序操纵的 如果在应用程序运行时添加
  • 将搜索图标添加到输入框

    div div
  • 禁用输入提交

    I have a form with a textfield inside and I am trying to disable the default behavior when the browser submits the whole
  • 防伪令牌和网络测试

    我正在尝试在 VS2012 中为 MVC 网站进行 Web 测试 其中一种情况是登录并浏览产品列表 选择您想要的产品并进入购买页面 问题是 当运行网络测试时 我收到有关防伪令牌的错误 并且它不匹配 到底如何才能用防伪令牌进行测试呢 用户mu
  • 如何通过互联网在两台计算机之间发送数据

    我一整天都在为此苦苦挣扎 我希望有人能帮助我 我的问题相当简单 我希望通过互联网将数据 主要是简单的命令 从一台电脑传输到另一台电脑 当两台计算机都连接到我的家庭路由器时 我已经能够使用 Java 中的套接字来实现这一点 然后 我使用两部不
  • 使用 Cartopy 从数据中屏蔽海洋或陆地

    我想从全球海面温度数据中掩盖陆地区域 我正在使用 Cartopy 来绘制数据 import numpy as np import matplotlib pyplot as plt import cartopy crs as ccrs fro
  • 带有托管 C++ dll 的加载程序锁定(regsvr32 R6033 错误)

    我有一个 C dll 它实现了多个 COM 接口 我正在尝试将其迁移到托管 C 我设置了 clr 编译器标志并将运行时库属性从 MT 更改为 MD 以避免这两个标志之间的冲突 但这就是我所做的全部更改 当它尝试在构建过程中注册 dll 时
  • 如何防止 itext7.pdfhtml 创建的 PDF 中的文本跨页中断?

    我正在使用 itext7 版本 7 1 2 和 itext7 pdfhtml 版本 2 0 2 从一些包含不得跨页面中断的元素 例如图形及其随附文本 的 HTML 生成 PDF 我尝试过使用显式分页符 正如在我们的旧版 iTextSharp
  • 获取 Devise 身份验证以发送电子邮件以检索密码

    我正在本地主机上测试 Rails 的 Devise 身份验证 并希望让它发送电子邮件以检索密码 即 忘记密码 链接 密码检索内置于 Devise 中 只需正确配置它即可发送电子邮件 在initializers devise rb中 我把 c
  • 我需要为我的应用程序制作和加载多大尺寸的 ImageList 图标(考虑更高的 DPI)?

    我有一个CListCtrl http msdn microsoft com en us library hfshke78 aspx控制 或ListView http msdn microsoft com en us library wind
  • React Native:由于 SoLoader 问题,应用程序在启动时崩溃

    我的 Android 应用程序出现问题 iOS 运行正常 每次我进行构建时 当我打开应用程序时 它会在开始之前关闭 我已经在Github和这里尝试了很多我一直在寻找的解决方案 但我还没有能够解决它 安装是干净的 我已经检查过没有遗漏任何东西
  • 更改 Android 软键盘示例设计、按钮和背景图像

    我正在通过修改 SDK 中的 android 软键盘示例来构建自定义键盘 我想更改按钮和背景的图像 但我无法弄清楚这些值的存储位置 它们存储在哪里或者我如何更改图像或简单的颜色 在 onClick 方法中 您需要更改按钮的图像 这样 pub
  • Qt 的 sysroot 和前缀选项的实际示例是什么

    我正在查看可以运行的所有选项configureQt 提供的脚本 特别是 qt everywhere opensource src 5 2 0 经过大量搜索后 我确定这些东西充其量记录很少 所以我希望我能得到一些帮助 当我查看描述时prefi
  • react-native-router-flux:如何防止在选项卡之间更改时重置选项卡场景历史堆栈?

    我有一个Router设置 2 个选项卡场景 Tab 1 have 2 navigable scenes static screens 屏幕A 有一个按钮可以导航到Screen B 屏幕B 只要有文字 Tab 2 just have 1 st
  • .Net 中的计时器和循环准确吗?

    在开发一个程序时 计算555定时器IC产生的脉冲的频率和脉冲宽度 通过PC并行端口传到PC 我注意到每次运行代码时它都会显示不同的值 因此我开始测试循环和计时器的准确性 我运行了以下代码 发现它们不准确 我可能是错的 如果我错了 请纠正我