vb Timer控件的执行过程?

ajunajun 2018-08-29 05:39:00
设置Timer控件的Interval=10000(即10秒),里面的代码执行时间不确定,也许3秒或5秒就执行完了,是不是还要等到10秒时才执行下一个Timer控件的代码?如果是,能不能只要本Timer的代码执行完就去执行下一个Timer,而不是等到10秒?
...全文
475 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
脆皮大雪糕 2018-08-30
  • 打赏
  • 举报
回复
如果你要的是每隔10秒执行一次,但执行花的时间不确定,只要求执行的间隔,可以考虑类似下面的处理

Option Explicit

Private Sub Form_Load()
Timer1.Interval = 500 '半秒就去检查一次
Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
Dim secondnow As Integer
secondnow = Second(Now()) '每半秒取当前系统时间的秒数
If secondnow Mod 10 = 0 Then '遇到整10秒的时候处理
'TODO : 你的业务处理逻辑
End If
End Sub



只要你单次处理的时间在10秒以内,就能基本每10秒触发一次处理。
笨狗先飞 2018-08-30
  • 打赏
  • 举报
回复
说的眼熟应该是指过程的程序结构,看起来像是把面向对象的程序写成了面向过程的。
但其实这个Timer函数模拟了一个消息处理循环。
舉杯邀明月 2018-08-30
  • 打赏
  • 举报
回复
你如果把Interval设置为“10秒”,它当然要等到“累计等了10秒”才会触发下一次执行啊。

如果你想你的代码“执行完”后立即触发下一次执行,
那么就应该把Interval设置为小于15的值(1到15完全等效)、初始Enabled设置为False。
要“开始执行”的时候,就把Enabled设置为True。
 这样,不管你用了几秒执行完一次,等执行完后,就会“立即”进行下一轮的事件触发了。

当然:因为你的“执行周期”较长,如果执行过程中有“DoEvents”的话,
 就必须按楼上那样,进入时把Enable设置为False、退出时把Enabled设置为True。
 修改Interval属性的操作就没这必要了。

Timer控件的“最短周期”是大约15.7ms,你即使设置为“1ms”,
 它也只能每秒触发60多次(跟系统“事务调度”有关,基本就是每秒60到64次左右)。
舉杯邀明月 2018-08-30
  • 打赏
  • 举报
回复
引用 6 楼 Runnerchin 的回复:
[quote=引用 4 楼 bakw 的回复:]
[quote=引用 3 楼 Runnerchin 的回复:]
那 Timer的意义何在?直接执行需要的次数不就行了?

这种程序本质上是连续运行的,但是这样的话,Timer事件函数就抢走了整个程序的控制权,
所以需要类似DoEvents来短暂的释放程序的控制权到别的地方。
DoEvents带来的问题程序重入,资源释放困难,内存溢出风险,很多时候退出都难。
用Timer代替DoEvents,速度上会降低,但是也能降低程序设计上的难度。[/quote]
楼主希望达到线性、重复执行同一段代码,而且希望每次执行之间无缝衔接,有没有觉得眼熟?[/quote]
不懂你说的“眼熟”是指什么事情呀,能说一下吗?
X-i-n 2018-08-30
  • 打赏
  • 举报
回复
引用 4 楼 bakw 的回复:
[quote=引用 3 楼 Runnerchin 的回复:]
那 Timer的意义何在?直接执行需要的次数不就行了?

这种程序本质上是连续运行的,但是这样的话,Timer事件函数就抢走了整个程序的控制权,
所以需要类似DoEvents来短暂的释放程序的控制权到别的地方。
DoEvents带来的问题程序重入,资源释放困难,内存溢出风险,很多时候退出都难。
用Timer代替DoEvents,速度上会降低,但是也能降低程序设计上的难度。[/quote]
楼主希望达到线性、重复执行同一段代码,而且希望每次执行之间无缝衔接,有没有觉得眼熟?
of123 2018-08-30
  • 打赏
  • 举报
回复
不清楚楼主的需求。

你的 Timer = 10 秒是为了定时首次代码执行吗?

如果是那样,就不要把代码都放在 Timer 事件中。在 Timer 事件中只做两件事:

1 关闭 Timer(Enable = False);
2 调用你的代码函数。
笨狗先飞 2018-08-30
  • 打赏
  • 举报
回复
引用 3 楼 Runnerchin 的回复:
那 Timer的意义何在?直接执行需要的次数不就行了?

这种程序本质上是连续运行的,但是这样的话,Timer事件函数就抢走了整个程序的控制权,
所以需要类似DoEvents来短暂的释放程序的控制权到别的地方。
DoEvents带来的问题程序重入,资源释放困难,内存溢出风险,很多时候退出都难。
用Timer代替DoEvents,速度上会降低,但是也能降低程序设计上的难度。
X-i-n 2018-08-30
  • 打赏
  • 举报
回复
那 Timer的意义何在?直接执行需要的次数不就行了?
笨狗先飞 2018-08-29
  • 打赏
  • 举报
回复

Private Sub Timer1_Timer()
Timer1.Enabled= false
... ... ... ...
Timer1.Interval=10
Timer1.Enabled=true
End Sub

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧