注册 登录
编程论坛 VB6论坛

关于Timer的启动问题

renxiaoyao36 发布于 2016-04-14 18:09, 5578 次点击
在按钮中加入如下代码,但是至始至终Timer都没执行过,全局中没有其他的Timer1.enabled=false代码
程序代码:
Timer1.Enabled = True
Timer2.Enabled = True
Timer3.Enabled = True
DoEvents
Sleep 3000 '延时3000毫秒
Timer1.Enabled = False
Timer2.Enabled = False
Timer3.Enabled = False
9 回复
#2
renxiaoyao362016-04-14 20:13
有没有人了解这个问题呢?
#3
xiangyue05102016-04-14 21:12
看你的代码不应该有问题啊,要不把主要代码都贴上
#4
yangfrancis2016-04-14 23:23
试一下如果把最后三行false注释掉看它执不执行
#5
风吹过b2016-04-15 08:17
Sleep 3000 '延时3000毫秒

这行是调用 API 函数吗?
SLEEP,是停止分配CPU时间片来达到延时的目的。
在停止分配CPU时间片的过程中,该程序的所有的响应过程都被暂停。

Timer1.Enabled = True
Timer2.Enabled = True
Timer3.Enabled = True              '开三个定时器
DoEvents                           '确保定时器开启成功
Sleep 3000 '延时3000毫秒           '程序暂停执行3秒,期间不响应任何事件,包括内部事件
Timer1.Enabled = False             '关三个定时器
Timer2.Enabled = False
Timer3.Enabled = False

这时,定时器还没办法触发定时器,就被关闭了。



[此贴子已经被作者于2016-4-15 08:19编辑过]

#6
xiangyue05102016-04-15 08:26
Timer1.Enabled = True已经执行的话,加中断应该是可以看到Timer事件触发。
@renxiaoyao36 你可以加中断看一下,如果Timer的事件触发,效果出不来。那就是风版说的。
#7
yangfrancis2016-04-15 16:57
多半是风老大说那个原因,就那么几行代码,除此以外无法给出别的解释。
#8
renxiaoyao362016-04-16 15:30
问题已经确认,谢谢大家的帮助。我换了算法,避开了这个问题,但是经过研究,发现问题是这样的,供大家参考一下
@xiangyue0510
@风吹过b
两位看看我的理解对不对。
Sleep确实是API调用的,理论上我在前面加上Doevents的话,除了这个模块的代码全部终止以外,其他代码不会终止的。
可是测试指出:如果Timer1,在它进行第一遍执行之前,运行到Sleep,就会中止Timer的循环运行,而如果Timer已经运行过一次了,就会无视Sleep,继续运行
另外,除了Timer以外,我发现Sleep执行的时候,程序不能执行任何移动操作,右上角的按钮全部失效。
我理解的对不对?
#9
风吹过b2016-04-17 10:40
都说过了 Sleep 是暂停CPU时间分配来暂停。
CPU时间都不给你的程序,你的程序还怎么响应,执行。
延时,最好的办法还是使用定时器。
执行完当前步骤,定义当前状态,开定时器,结束当前函数。
定时器触发时,先关掉自己,防止重复,然后再根据当前状态,再运行后面一些步骤。
#10
renxiaoyao362016-04-17 12:51
回复 10楼 风吹过b
谢谢风版
1