Event5_3.ZIP smallnew.gif (926 bytes)Asynchronous Execution - YES!!
I modified Event5_3.vbp, and set up the server side of the project as an ActiveX EXE. If you run it inside the VB IDE, you should finally see the asynchronous processing. The trick is to run the client and the server in two separate instances of Visual Basic.

You can also compile the ActiveX EXE for the server side, and force it to register by double clicking on it. Then compile the EXE file for the client side. When you run the client EXE outside of Visual Basic, it shows asynchronous processing!
Server side First load the project Event5_3_Srv.vbp into Visual Basic.

Don't worry if you see an error message "Unable to set version compatible component ... Event5_3_Srv.Exe." This is because the client project in the ZIP file has a reference to the GUID for the Event5_3_Srv.Exe file from my PC.

When you run this project, you'll see a dialog box about the project properties. Simply click on OK. You can't actually see anything happen yet.

Client side Load a second instance of Visual Basic. Load the client project Event5_3_Cli.vbp into Visual Basic.

Don't worry if you see an error message "Could not create reference ... Event5_3_Srv.vbp." This is because the client project in the ZIP file has a reference to the GUID for the Event5_3_Srv.Exe file from my PC.

When you try to run the program, you may see an error message "Compile error: User defined type is not defined". This is because you need to set a reference to the currently executing server project.

From the VB menu, choose Project / References. Scroll down to select the Event5_3_Srv.Vbp that you just created by running it in the other instance of VB.

 

 

Run inside the VB IDE Go ahead and run the program, but don't Click on the GO button yet. One final important step before you actually run the program: MINIMIZE both instances of Visual Basic. If you don't do this, the message box from the server side may not be visible, since it is hidden behind the client project's instance of VB.

I hope that you'll see that the asynchronous processing really works. For some reason, when I tried this originally, it did not work for me. I have also had the program fail with automation errors at the very beginning. Usually this is fixed by deleteing the server reference (un-checking the box from Project / References) and then restoring it.

Run compiled client programs If you follow steps similar to what was shown for the Event5_2 projects, you can compile both the client and server projects as EXE files. They ran identically to what I saw using two instances of Visual Basic.
Multithreading After all that, the concept of multithreading awaits you. There is some great reading in Visual Basic Books Online that came with VB 5.0, located as follows:
bulletComponent Tools Guide
bulletCreating ActiveX Components
bulletBuilding Code Components
bulletScalability and Multithreading

Everything in there is valuable information. For example, I found these interesting statements:

"The big drawback to the thread-per-object model is that you have no control over the number of objects (and hence threads) that clients create. Creating too many threads will bog the operating system down in thread-maintenance overhead.

Too many active threads — that is, threads that are actively executing code — will bog the operating system down even more quickly. Generally speaking, you want about the same number of active threads as you have processors, to guarantee that there’s never an idle processor. When you have just one processor, that’s not very many active threads."

Sounds like we all need to buy 64 way servers to really get the most use from multithreading!!