看到多线程了,用多线程写了一个模块,可以用来代替timer,但是多线程在VB里的不稳定应该都知道吧····Option ExplicitPrivate Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Long, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Longpublic FinishSign as booleanPublic Sub SetTimer(eventstr As Long) Call CreateThread(Null, ByVal 1&, AddressOf Timer1, VarPtr(0), ByVal 0&, threadid)
End SubSub Timer1() if finishsign = true then '这个相当于timer里的enable属性 '这里写Timer里的事件 end if Sleep 20000 ‘这个相当于间隔
Call Timer1 End Sub
HOOK,自己截消息 用SetTime定时发送消息。
一种是像2楼的多线程,多线程虽然不稳定,但是如果只用作触发timer还应该没问题 一种是直接使用api settimer,这种东西俺也很少用,也不知道是否管用Option ExplicitDeclare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long Public id_timer As Long '用来存放返回的定时器的IDDim percentdone As Long 'Starttimer过程调用SetTimer函数生成定时器,hwnd和nIDEvent送入0表示在回调过程中不使用它们,uElapse置为100,让程序每100毫秒就调用一次回调函数;lpTimerFunc参数由AddressOfTimerProc将 'TimerProc的地址送入函数.Public Sub StartTimer() id_timer = SetTimer(0, 0, 1000, AddressOf TimerProc) End Sub 'Endtimer清除定时器,同时给用户一个信息反馈。 Public Sub EndTimer() KillTimer 0, id_timer id_timer = 0 MsgBox "Timer has been killed!", vbExclamation, "Done!" End Sub'----回调过程 Public Sub TimerProc() percentdone = percentdone + 1 MsgBox percentdone If percentdone >= 10 Then EndTimer End End If End SubSub main() StartTimer End Sub
在该函数中设置一个回调函数处理代码即可!你自己上网查询一下,例子多的是!
Private Declare Function TerminateThread Lib "kernel32" (ByVal hThread As Long, ByVal dwExitCode As Long) As Longpublic FinishSign as booleanPublic Sub SetTimer(eventstr As Long) Call CreateThread(Null, ByVal 1&, AddressOf Timer1, VarPtr(0), ByVal 0&, threadid)
End SubSub Timer1()
if finishsign = true then '这个相当于timer里的enable属性
'这里写Timer里的事件
end if
Sleep 20000 ‘这个相当于间隔
Call Timer1
End Sub
用SetTime定时发送消息。
一种是直接使用api settimer,这种东西俺也很少用,也不知道是否管用Option ExplicitDeclare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public id_timer As Long '用来存放返回的定时器的IDDim percentdone As Long
'Starttimer过程调用SetTimer函数生成定时器,hwnd和nIDEvent送入0表示在回调过程中不使用它们,uElapse置为100,让程序每100毫秒就调用一次回调函数;lpTimerFunc参数由AddressOfTimerProc将
'TimerProc的地址送入函数.Public Sub StartTimer()
id_timer = SetTimer(0, 0, 1000, AddressOf TimerProc)
End Sub
'Endtimer清除定时器,同时给用户一个信息反馈。
Public Sub EndTimer()
KillTimer 0, id_timer
id_timer = 0
MsgBox "Timer has been killed!", vbExclamation, "Done!"
End Sub'----回调过程
Public Sub TimerProc()
percentdone = percentdone + 1
MsgBox percentdone
If percentdone >= 10 Then
EndTimer
End
End If
End SubSub main()
StartTimer
End Sub