Advance your scripting skills to the next level with TechRepublic’s free Visual Basic newsletter, delivered each Friday. Automatically sign up today!
Developers most commonly use the DoEvents
function to permit a VB6 program to remain responsive to user input (i.e., the
keyboard and mouse) while executing long, repetitive calculations.
It’s processor-intensive to make calls to DoEvents, and calling this function every time a long loop
iterates can really slow things down. Without DoEvents,
however, the program will be “frozen” for the duration of the loop,
which is not a good idea!
The best solution I have come up with is the API function GetInputState().
This function returns a non-zero value if there is a mouse or keyboard event
waiting in the Windows queue for the current thread (in other words, the
current program). Because a call to this function is a lot faster than a call
to DoEvents, you can check its return value and then
call DoEvents only when an input event is waiting.
The following is a code sample that illustrates my point:
For i = 1 To 50000000
If GetInputState <> 0 Then DoEvents
' Iterated calculation code goes here.
Next i
You’ll see a noticeable speed improvement with this
technique.