这里仅提供一个方案,当然会有比本方案更好的,欢迎提供。

简介

在vb.net实现周期调度的问题时(就是间隔固定的时间做什么事情),我们最先想到的一定是(反正我是)利用timer(定时器)来做这个计时的工作。采用多少ms来调用计时器的方式进行周期性的做一些事情。但是,当我用ms级的周期调度的时候,会存在很大的误差。那么不得不想一个其他方案。

思路

  • 做一个最小时间片,以最小时间片为单位进行计数,在最小时间片的基础上进行周期的划分。
  • 我是基于1ms的时间片来进行操操作。

以下是代码

Private Declare Ansi Function timeGetTime Lib "winmm.dll" () As Long
Private BaseTime As Long
Private SaveTime As Long
Private Run_Flag As Boolean
Private Cycle_Count As Long Private Sub b_start_Click(sender As Object, e As EventArgs) Handles b_start.Click
'this is init var and base station BaseInit()
start_fun()
While Run_Flag
While timeGetTime < SaveTime + 1
Application.DoEvents()
End While
SaveTime = timeGetTime 'save time
Cycle_Count = Cycle_Count + 1 '1ms If Cycle_Count Mod (5) Then
Run_5ms()
End If 'if you need ,you can add 10ms,50ms,100ms,1000ms etc.
End While
End Sub Sub BaseInit()
Run_Flag = False
BaseTime = 0
SaveTime = 0
Cycle_Count = 0
show_task.Text = 0
End Sub Sub start_fun()
BaseTime = timeGetTime
SaveTime = BaseTime
Run_Flag = True
End Sub Sub Run_5ms()
'do what you want to do.
show_task.Text += 1
End Sub Private Sub b_stop_Click(sender As Object, e As EventArgs) Handles b_stop.Click
BaseInit()
End Sub

说说Timer的问题

在计时方面,如果对时间精度不是很大要求的话,其实可以使用100ms级别的timer,或者s级别的timer,这样大概误差在30s会偏差一个2s左右的样子。对于有严格时间要求的,还是不要使用timer这个。

VB .NET周期实现的更多相关文章

  1. 连载《一个程序猿的生命周期》-6、自学C++,二级考过后,为工作的机会打下了基础

    一个程序猿的生命周期 微信平台 口   号:职业交流,职业规划:面对现实,用心去交流.感悟. 公众号:iterlifetime 百木-ITer职业交流奋斗 群:141588103    微   博:h ...

  2. [转]JAVA虚拟机的生命周期

    JAVA虚拟机体系结构 JAVA虚拟机的生命周期 一个运行时的Java虚拟机实例的天职是:负责运行一个java程序.当启动一个Java程序时,一个虚拟机实例也就诞生了.当该程序关闭退出,这个虚拟机实例 ...

  3. ORM框架-VB/C#.Net实体代码生成工具(EntitysCodeGenerate)【ECG】4.5

    摘要:VB/C#.Net实体代码生成工具(EntitysCodeGenerate)[ECG]是一款专门为.Net数据库程序开发量身定做的(ORM框架)代码生成工具,所生成的程序代码基于OO.ADO.N ...

  4. Asp.Net生命周期系列五

    如果您看了我的前四篇文章,应该知道目前Http请求已经流到了HttpModule这个程序员手中了,而且我们可以注册自己的HttpModule并且可以在里面注册一些事件来控制这个Http请求,但是到目前 ...

  5. ASP.NET页面生命周期总结(1)

    图解:1) 浏览器   :把用户的操作封装成一个请求通过socket发送到后台服务器. 后台服务器:首先有个内核模块Http.sys 和针对每个应用程序池都有一个请求队列.然后请求到达http.sys ...

  6. VB.net 连接池

    上篇博客介绍了临时表的使用,以及它的生命周期和连接池的关系.那么为了能更好的把握临时表的产生和消亡,本篇博客就介绍Vb.net连接池.在打开和关闭数据库连接时的耗费的资源是非常高的.那么在程序需要频繁 ...

  7. asp.net 管道模型+生命处理周期

    http://www.cnblogs.com/qianlifeng/archive/2010/12/16/1908568.html https://msdn.microsoft.com/zh-cn/l ...

  8. 快速构建Windows 8风格应用30-应用生命周期管理

    原文:快速构建Windows 8风格应用30-应用生命周期管理 引言 Windows 8 中可以启动多个应用并在其中切换,我们没有必要担心降低系统速度或消耗电池电量. 因为系统会自动挂起(有时会终止) ...

  9. 详细理解servlet实现的几种方式和生命周期

    现在很多的开发都是用的框架,然后很多同学学习的时候又是直接接触的框架,对于底层的一些开发,完全没有任何的了解.虽然对于业务上面来说,没有什么问题.但是很多时候当你被面试问到,或者是想要了解框架底层原理 ...

随机推荐

  1. C#------对SQLServer进行简单的增,删,改,查

    EF中的操作转载: http://www.cnblogs.com/mcgrady/archive/2015/03/21/4355282.html PSContext db = new PSContex ...

  2. 《零成本实现Web性能测试:基于Apache JMeter》读书笔记

    1.性能测试概念 性能测试目的: 评估系统能力,验证系统是否符合预期性能指标 识别系统中的弱点 系统调优,改进系统性能 检测长时间运行可能发生的问题,揭示隐含问题 验证稳定性.可靠性 常见性能指标 B ...

  3. JavaScript学习笔记——BOM_window对象

    javascript浏览器对象模型-windwo对象 BOM Browser Object Model window对象 是BOM中所有对象的核心. 一.属性 1.(位置类型-获得浏览器的位置) IE ...

  4. background属性

    background: url(images/01.jpg) 0 10px; 效果: background: url(images/01.jpg) 0 -10px; 效果: *注释:10px 是网上去 ...

  5. DrawCall

    [精]draw call 理解和优化 http://bubuko.com/infodetail-387899.html DrawCall 优化 . http://www.cnblogs.com/sof ...

  6. sqlmap注入小结

    sqlmap注入时: 1.判断可注入的参数 2.判断可以用那种SQL注入技术来注入 3.识别出哪种数据库 4.根据用户选择,读取哪些数据 sqlmap支持五种不同的注入模式: 1.基于布尔的盲注,即可 ...

  7. jsp的标签

    一.JSP标签介绍 JSP标签也称之为Jsp Action(JSP动作)元素,它用于在Jsp页面中提供业务逻辑功能,避免在JSP页面中直接编写java代码,造成jsp页面难以维护. 二.JSP常用标签 ...

  8. swoole 教程

    环境安装:http://blog.csdn.net/ldy3243942/article/details/40263735 Task使用以及swoole_client:http://blog.csdn ...

  9. Mount挂载命令使用方法

    语法: mount -t 类型 -o 挂接方式 源路径 目标路径     -t 详细选项: 光盘或光盘镜像:iso9660 DOS fat16文件系统:msdos Windows 9x fat32文件 ...

  10. NancyFx中使用自带的IOC容器

    /// <summary> /// Cors扩展 /// </summary> public static class IPipelinesExtensions { /// & ...