Software Development

Speed things up by minimizing calls to DoEvents

It might enter your mind to use the DoEvents function to permit a VB6 program to remain responsive to user input while executing long calculations. However, check out how using the API function GetInputState() can speed up your technique.

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.

0 comments

Editor's Picks