各位大侠:
我在编程时发现当几个timer同时工作时,会有一个timer的enable已经为
true 了可时间早过就是不触发Ontime事件。而当其他几个timer中的任意一个停下后,该timer又可正常工作了。同时工作的共有4个timer,一个为主扫描,其他几个执行某项功能的timer,出问题的就是其中之一。pls help me,
我在编程时发现当几个timer同时工作时,会有一个timer的enable已经为
true 了可时间早过就是不触发Ontime事件。而当其他几个timer中的任意一个停下后,该timer又可正常工作了。同时工作的共有4个timer,一个为主扫描,其他几个执行某项功能的timer,出问题的就是其中之一。pls help me,
解决方案 »
- 远程连接数据库问题(mssql)奇而不怪的问题,请大侠,高手帮我解决,高分感谢!!!!!!!!!!!!!!!!!!!!!!!!!
- 如何设置进度条使得文件拷贝和进度条进度一致
- “对象关闭时,不允许操作”???
- 请问如何在vb中读取system目录下文件的内容?
- 请问Autocad2000的VBA中如何放置一个OLE控件(连接Autocad)
- 关于日期格式不兼容的问题!
- 初学者提问:关于字符串的两个小小问题,立即揭帖。谢谢!
- 如何在一个窗体中同时播放两个avi文件,一个在窗体上部一个在下部?
- 关于winsock控件的数据发送的问题?(发送的方式)
- postmessage()
- 请教关于listview显示动态图标的问题
- 请问怎样得到内存中指定位置变量的值?
一点经验,触发事件的时候,不要用=,而应该用>=,不知道你的程序在timer控件的timer事件中是否利用了=进行判定,如果有的话,换成>=试试
我觉得不像程序的问题,timer里面没有什么判断的,我用text可以清楚的显示timer
的timer的enable=true,可就是不触发ontime. 我想问问一个timer的enable不断变换true和false会不会影响其他的timer工作。tomorrow,我去公司拭式Fsoft和AresChen
你的问题是vb单线程所致
当你让timer = true实际上是
SetTimer(me.hwnd,,)了, 这样
如果系统空闲的时候。检测消息循环,发现了WM_TIMER消息则执行timer_ontimer事件
如果别的time站用了时间(比如长时间的循环),让系统没时间获取消息循环。则取出来的时间有差别。所以必须到别的time的循环中加入doevents 但这样会导致别的time的重入。所以
一般在timer_ontimer事件中的开头和结尾都需要加入 time1.enable = false
time1.enable = true
顺带:其实time1本身就会处理该操作。 他在你退出sub的时候,会执行KillTimer 和 SetTimer 函数
可以做个实验。在系统空闲的时候
time的间隔是1s。第一次time里面执行了0.5s. 到第2次time执行的间隔则为1.5s. 而不象API
恒定1s发送一个WM_TIMER消息(如果消息队列中还有WM_TIMER消息,则不发送,所以系统空闲的时候,2次时间间隔是1s的整数倍) 而加time1.enable=false 其实也就是KillTimer,而执行完毕timer1.enable = true 也就是SetTimer,下次定时候从这个时间算起
所以在Timer_ontimer事件中.加上述语句不会影响时间.
有必要先将我的问题再详细描述一下:
我有4个timer同时工作,timer1,timer2,timer3,timer4.
timer1主循环其中有4个耗时的通讯子程序(是用查询所以费时)interval=10
timer2中有1个耗时的通讯子程序interval=300
timer3,timer4中只是起延时的作用interval=1000,时间到后置一个标志
运行时,
timer1正常运行,通讯绝对顺畅timer1中耗时估计150-200ms
(用通讯字节理论上计算timer1运行7-8次/s,实际5-6次/s)
timer2运行时,我故意使timer2中预定任务无法完成,迫使timer2不断重新启动
试图完成任务。
这时就出现了问题,
当timer3,timer4的enabled=true,可是只有timer4可以不断启动来完成延时任务
可timer3却僵在那,enabled=true,却不置标志。
只有当timer2成功完成通讯工作停止后,或是timer4完成所有的延时任务停止,
timer3才恢复工作。
经楼上大侠的指点
看来在timer_ontimer事件中的开头要加入timer1.enable = false
是很重要的。(我的timer2中可能没加)
但我不太明白,timer都有interval,为设么“如果别的time站用了时间(比如长时间的循环),让系统没时间获取消息循环。请大侠指教