I have a application in VB6 which calls functions in a multithreaded DLL used for comms. To transfer large amounts of data (ie takes 5 seconds) I have thread functions in the DLL to do the job so that the VB application doesn't suspend execution waiting for a function to return. I want to display a progress bar of how much data the thread has successfully transferred on the VB app, by simply polling a DLL function to return a value using a normal timer. While this thread runs, I need to suspend the operation of the calling VB function until the thread has finished, and this is the problem. Under WinNT, Win2K a DoEvents loop works fine, the thread runs, everything works. Under Win98 the thread runs at about 1/10th speed. Is this down to the multithreading model being different on NT and 95/98 platforms ? If so is there much I can do about it ? It seems DoEvents gives more processor time to background tasks in NT, and 98 gives higher priorities to the active application. Other option I tried was to pass back the thread handle from the DLL, and call WaitForSingleObject in VB. This halts the VB function until the thread has finished, but it also halts the rest of the application - which I don't want ! Is there any way of getting around this problem ?