Version 2 - Int Speed 2.vbp

Code changes

This second version attempts to fix two problems in the first version. When you click on a button to start the loop running, you now get feedback that something is happening. This visual feedback is in the form of "dots" printed on the form itself:

For llCounter1 = 1 To 200
    llAccum = 0
    'Not in version 1
    DoEvents 
    'Not in version 1
    If llCounter1 Mod 10 = 0 Then Print ".";

   
    For llCounter2 = 1 To 32000
         llAccum = llAccum + 1
    Next
Next

DoEvents effects

If you click on the End button to stop the program, it is handled immediately. This is accomplished via the DoEvents statement in the outer loop.

The purpose of DoEvents is to allow Windows to handle any user interface events that are pending. In version 1 (without the DoEvents statement) nothing happens when you clicked on the End button. In version 2, when you click the End button, the code for its click event is executed the next time the outer loop executes, or almost immediately. Then the program stops executing:

Private Sub cmdStop_Click()
    Unload Me
End Sub

Private Sub Form_Unload(Cancel As Integer)
    End
End Sub

DoEvents
Problem 1
One thing to notice is that the program slows to a crawl if you place the DoEvents statement in the second  loop, which executes 32,000 times. You should write your code carefully to not over use the DoEvents statement!
DoEvents
Problem 2
If you click the buttons other than the End button several times, you'll see that each click is handled immediately (more or less). If you look carefully at the results printed on the form, you may be able to see that they are not correct.

What happens is that each time you click on a button, the Click event is stored by Windows. When a DoEvents statement is executed, Windows processes all user interface events that are pending. DoEvents means "do user interface events".

The code that is currently executing is interrupted while the code in the Click event of the pressed button is running. If you click the Variant button three times, the same Click event code will run each time. However, when the last Click event is finished, the program continues running from where it was interrupted. This seems like Magic!

Solution A to
Problem 2
Assume that you don't want executing code to be interrupted this way. Then you should disable ALL command buttons at the beginning of the Click event code for each button.

This is done by setting the Enabled property to False. Then it would be impossible to interrupt the code by pressing any command button. Of course, eventually you'll need to re-enable the command buttons in code by setting the Enabled property to True. 

This solution used for Version 3A of the program.

Solution B to
Problem 2
Assume that you want to allow the executing code to be interrupted. Additional code needs to be written to clean up the display of the information on the form. Even more code would need to be written to make the timing results show correct values!

This solution was used for Version 3B of the program.