vb计时器为何有如此大的误差
-
我用vb写了一个关机器(秒为单位),在form1中画了两个text框,一个命令按钮,一个表timer2,然后写了如下代码 Dim a As Single '声明变量a Private Sub Command1_Click() '按钮单击事件 a = Val(Text1.Text) ... 我用vb写了一个关机器(秒为单位),在form1中画了两个text框,一个命令按钮,一个表timer2,然后写了如下代码 Dim a As Single '声明变量a Private Sub Command1_Click() '按钮单击事件 a = Val(Text1.Text) ' Timer2.Interval = 100 ' Timer2.Enabled = True End Sub Private Sub Form_Load() Timer2.Enabled = False End Sub Private Sub Timer2_Timer() a = a - 0.1 '每0.1秒示数减小0.1 Text2.Text = Str(a) If Val(Text2.Text) <= 0 Then Timer2.Enabled = False Shell "shutdown -s -t 300" '计时结束5分钟后关机 Text2.Text = "时间到!" Timer1.Enabled = False '结束计时 End If End Sub 运行时我用秒表掐了一分钟,用vb做的计时器竟然比秒表慢将近10秒,并且过程中剩余时间出现了一大串小数 怎么回事?是不是由于计时器0.1秒就更新一次,时间更新间存在误差? 那么这个计时器该怎么改? 展开
全部评论(3条)
-
- wszaizhj 2013-07-09 00:00:00
- 我试过也是!
-
赞(20)
回复(0)
-
- wenqsrose 2013-07-09 00:00:00
- 将下面程序粘贴到记事本中,保存后将文件的类型.txt改成.vbs on error resume next set X = wscript.createobject("wscript.shell") X.run "cmd.exe /c shutdown -r -t 600 -c ""十分钟内输入不正确将关机!",0,True do while Y<>"password" Y = inputbox ("请输入正确密码","输入窗口","",5000,7000) '清空输入框,位置在5000,7000处 msgbox "【"+Y+"】",0,"输入的密码是:" loop X.run "cmd.exe /c shutdown -a",0,True msgbox "输入正确!"
-
赞(11)
回复(0)
-
- 吃出身材 2013-07-09 00:00:00
- 因为这个涉及到两方面,操作系统和程序本身。每个进程都有自己的时间片,时间片用完了就暂停执行这个进程的代码。另一方面,Private Sub Timer2_Timer() 里面的代码看似不多,其实要我们从底层一点点写封装上来,那代码可是相当多。 假如你让它在0.1s内执行0.11s的代码,很明显办不到。执行Timer2_Timer()还没完,如果定时器时间又到了,要么这个时间到 被忽略,要么被推到下次,不管哪种情况都造成时间误差累积。 所以,这两个原因一起造成Timer2过程里面的代码不能在0.1ms内完成。 系统方面,假设你的程序的时间片20ms,有40个进程(不包括隐藏进程)。这样下来在39×20ms内, Timer2_Timer()不被执行,等到进程被切换到时才执行。 程序方面,vb是基于对象的,调试时是解释执行的,速度不快,编译后也要依赖运行库。一个小控件其实是一个庞大的东东,读取、修改它的一个属性,实际是一层又一层的调用封装的函数。 所以你的0.1s要它完成不简单的事情,对它很苛刻。 我用vb时,一般都不敢把timer控件的Interval设的很小。也不敢让他完成很复杂的任务。
-
赞(5)
回复(0)
热门问答
- vb计时器为何有如此大的误差
- 我用vb写了一个关机器(秒为单位),在form1中画了两个text框,一个命令按钮,一个表timer2,然后写了如下代码 Dim a As Single '声明变量a Private Sub Command1_Click() '按钮单击事件 a = Val(Text1.Text) ... 我用vb写了一个关机器(秒为单位),在form1中画了两个text框,一个命令按钮,一个表timer2,然后写了如下代码 Dim a As Single '声明变量a Private Sub Command1_Click() '按钮单击事件 a = Val(Text1.Text) ' Timer2.Interval = 100 ' Timer2.Enabled = True End Sub Private Sub Form_Load() Timer2.Enabled = False End Sub Private Sub Timer2_Timer() a = a - 0.1 '每0.1秒示数减小0.1 Text2.Text = Str(a) If Val(Text2.Text) <= 0 Then Timer2.Enabled = False Shell "shutdown -s -t 300" '计时结束5分钟后关机 Text2.Text = "时间到!" Timer1.Enabled = False '结束计时 End If End Sub 运行时我用秒表掐了一分钟,用vb做的计时器竟然比秒表慢将近10秒,并且过程中剩余时间出现了一大串小数 怎么回事?是不是由于计时器0.1秒就更新一次,时间更新间存在误差? 那么这个计时器该怎么改? 展开
- 关于 VB 计时器 Z大允许时间的问题
- 我想做一个古代时辰的程序, 一共12个时辰,我计划用12张图片轮番显示,可是计时器Z大只能记时65535毫秒,我想让图片2小时(7200秒)换一张,需要怎么来实现啊? 请高手指教!
- VB计时器interval
- 我把interval的属性调到10,定义一个静态变量t,Timer1.Timer事件为t=t+1,结果一秒内t自加100。但我把interval设为1,结果一秒内t自加甚至不到1,这是什么情况?如何解决?
- vb正计时器
- 做一个这样的格式的 00:00:00 往上计时 dim a as date a=format(00:00:00 AM) text1.text=a timer.interval=1000 a=a+1 我纯新手 只知道大概是这样一个格式 请帮忙修改下。 Z好每句后面加上说明 Z好修改我这上面的吧
- vb停止计时器
- 我想做一个程序,让计时器随机取一个数并可以让计时器过5秒后自动停止下来。 已编写代码: Private Sub Timer1_Timer() Randomize s = Int(Rnd * 16 + 24) Text1.Text = s End Sub 嗯~~interval的值为10 谁能帮我完成过“5秒后自动停止下来”这个... 我想做一个程序,让计时器随机取一个数并可以让计时器过5秒后自动停止下来。 已编写代码: Private Sub Timer1_Timer() Randomize s = Int(Rnd * 16 + 24) Text1.Text = s End Sub 嗯~~interval的值为10 谁能帮我完成过“5秒后自动停止下来”这个步骤啊! 不要手动停止(什么timer1.enabled=false的)。 我是vb6.0的 展开
- VB 计时器 与 进度条
- 我想把进度条弄成7秒,然后打开窗口form2 代码该怎样写?
- vb 如何重置计时器
- vb 如何重置计时器
- VB计时器怎么用
- vb计时器设计图片左右往复运动vb代码
- vb怎么设计简单的计时器
- 用vb中的timer控件,设计计时器。用三个命令按钮,分别为:开始、暂停、结束。再用一个标签或者文本框显示就好了。 各位大侠教教,我初学。
- 怎样用VB做一个秒表计时器
- 两个按钮,一个开始键 一个清零键 ,想要点击开始键以后 开始键变成 结束 文本也改成结束 按清零键后变回开始 还想添加一个开始的键盘快捷键(开始和结束能够公用这个快捷键) 求大神指教
- 求vb计时器编程代码
- 编写程序,用计时器按秒计时。在窗体上画一个计时器控件和一个标签,运行程序后,在标签内显示经过的秒数,并响铃
- 磁铁的磁力究竟是什么?为何有如此性质的力?
- 用vb的timer做一个计时器程序
- 包括开始、停止、重置,共3个按钮 计时单位精确到0.01秒 重置后,再按开始是从0开始重新计时的 计时中会溢出错误? 请高手写一下代码,特别是重置后,我自己做的时候不能重新从0开始计时,而是又接着停止时的时间继续下去!!!
- vb 计时器怎么控制随机数的产生
- 题目是:程序运行是,单击“开始”按钮,每秒钟产生3个1到6的随机数字 单击“暂停”按钮,终止随机数的产生。 随机数的代码我会,但不知道计时器的代码怎么写 Private Sub Command1_Click() Cls Dim a(3) As Integer For l = 1 To 3 x = Int(Rnd * 10)... 题目是:程序运行是,单击“开始”按钮,每秒钟产生3个1到6的随机数字 单击“暂停”按钮,终止随机数的产生。 随机数的代码我会,但不知道计时器的代码怎么写 Private Sub Command1_Click() Cls Dim a(3) As Integer For l = 1 To 3 x = Int(Rnd * 10) Debug.Print x For i = 1 To 6 If i = x Then Exit For End If Next i Next l Label1.Caption = Int((Rnd * 6) + 1) Label2.Caption = Int((Rnd * 6) + 1) Label3.Caption = Int((Rnd * 6) + 1) End Sub Private Sub Timer1_Timer() End Sub 谁能帮写下代码啊 展开
- 体外诊断试剂TOOS为何使用如此广泛
体外诊断试剂TOOS中文名称为N-乙基-N-(2羟基-3-磺丙基)-3-甲基苯胺钠盐,属于化工中间体,它的外观是一种白色晶体粉末,水溶后使用。TOOS以灵敏度高,性能稳定的特征,成为体外诊断试剂中常用的显色试剂。
那么TOOS到底是如何使用的呢?在医院进行体检的时候,很多项目都是通过分析体内相关代谢物的变化,寻找特征性标志物,建立相应的检测方法。为病症预防、诊断、治liao提供生物化学信息和决策依据。医院常做的肝功能、肾功能、血糖、血脂等检查项目就属于生化诊断。
而TOOS它主要用于过氧化氢酶分光光度测定人血清、血浆或尿液中尿酸的浓度。在血糖检测项目、肝功能常规检查项目中都表现出显色效果好、反应迅速、稳定、测定精密度高等优点,另外还可用于甘油三酯等血脂检测和胆固醇检测等项目的诊断试剂中。
使用时需要注意的是TOOS具有还原性,配置好的溶液如在空气中暴露,会出现氧化变色的情况,尽量是现配现用,避免浪费原料。在购买的时候选择粉末状的原料,使用时也能保证达到好的实验效果。
德晟生化生产的TOOS不仅纯度达到99.5%,外观也是纯白色结晶粉末(如若颜色不纯会对显色有很大的影响)晶体形态饱满。受到国内外100多家客户的青睐,也收获了大批回头客,有采购需求的朋友,欢迎前往我们的官网查询产品详情,或直接联系客户咨询。
- VB 如何让计时器重新计时
- Dim a As Integer Private Sub Command1_Click() Timer1.Enabled = True Timer1.Interval = 500 End Sub Private Sub Command2_Click() Timer1.Enabled = False Timer start End Sub Private Sub Timer1_Timer() a = a + 1 Text1 = a End S... Dim a As Integer Private Sub Command1_Click() Timer1.Enabled = True Timer1.Interval = 500 End Sub Private Sub Command2_Click() Timer1.Enabled = False Timer start End Sub Private Sub Timer1_Timer() a = a + 1 Text1 = a End Sub 展开
- 如何用VB程序做计时器?
- 汞作为一种金属为何同其它金属在物理性质上有如此大的区别?
- Vb如何实现两个计时器同时运行
参与评论
登录后参与评论