需要用到多个“doevents”,如何处理
有个问题请教大家。
我用vb做的个抓数据的小软件。
用了3个timer控件,分别抓3个网页的数据,实时性的要求比较高,所以timer控件的interval的时间设置的比较短,就因为这样,有时会在界面出现“没有响应”的提示,我本来想加个“doevents”函数,但只能加一个,请问有什么好办法可以解决这个问题的。
[解决办法]
为什么只能加一个?
[解决办法]
用一个 Boolean 型的模块变量,所有的 Timer 事件都如下处理:
private m_InProcess as boolean
private sub TimerX_Timer()
if m_InProcess then exit sub
m_InProcess = True
正常的处理过程
m_InProcess = False
end sub
[解决办法]
doevents并非你想象的那样,它虽然是分一些时间片给其它进程,但并不会造成你说的那样的现象。
实际上timer最好不要太多,否则确实可能会出现一些问题,对你来说,即使需要考虑实时性,也完全可以通过一个timer来实现
可以用3个tick标志来判断是否需要执行哪个任务,timer的Interval设置为三个任务interval相减的最小值
[解决办法]
Private Declare Function GetTickCount Lib "kernel32 " () As Long '调用api实现延迟200ms
Private Function Delay(MSceond As Long)
Dim i As Long
If MSceond < 2 Then Exit Function
i = GetTickCount
Do While GetTickCount - i < MSceond
DoEvents
Loop
End Function
private sub form_load()
delay(200) '200即为参数200毫秒
end sub
调用api实现延迟200ms
看看这个函数对你有用没?