From: xytsrm on 4 Aug 2010 17:42 Thanks Guys, The bottom line seems to be it's not very easy to overcome the Ad Hoc use of "DoEvents" in VB6. Which I am currently doing, and although it works fine, I just don't like the structure. May have to embrace vb.Net....eventually. X. "Dee Earley" wrote: > On 04/08/2010 17:38, xytsrm wrote: > > Hi Tom, > > > > This is not specifically about the MCI control, it's just that the control > > illistrates how VB events get suspended; in this case they are suspended > > during the synchronous "Play", forcing the use of asynchronous mode, looping > > until "Stop" and including "DoEvents" in the loop. I also use other > > functions that suspend the event processing, leading to a very Ad Hoc > > collection of loops containing "DoEvents". I was hoping I could find a > > system function (e.g. timer) that could call a single function in my app on > > at a regular interval and not be suspended by any other process. That > > function would contain the "DoEvents", insuring all events were processed > > regardless of whether a given control was being used synchronously. It would > > seem that this should be possible, given that the OS does continue processing > > events, regardless of indivudual apps. I am surprised that VB doesn't > > provide some capability to multi-task event processing without the need for > > the scattering of "DoEvents" around code. Your comments on the way callbacks > > work re-enforces my opinion that "Dan Appleman's" server approach won't work > > either. Do you know whether this issue has been overcome in VB Net? > > It essentially comes down to threading. > > A thread can only do one single thing at a time. > Sadly VB6 natively only really supports a single thread (*). > > If your code calls other code (that is synchronous) then it will be > blocked until it returns. > This "block" also includes processing of windows messages, redrawing, etc. > If the code calls DoEvents then it allows these to be processed before > it has returned control to your code. > > Asynchronous normally means it moves everything off to a background > thread and allows your code to carry on as before, but there are some > exceptions that will just call Doevents allowing other code to run, but > STILL blocking your thread of execution (it hasn't returned). > > * Multithreading in VB6 is possible but very awkward to handle. > You either use out of process COM objects (ActiveX EXEs) or some very > carefully written API code to handle TLS (or lack of) but you can't > easily call other objects. > > ..NET (cue flames..) allows you do do background tasks a lot easier so > you can start off one video on a background thread while your UI threads > carries on processing messages and idling. > > Reading that back, it makes some sense so I'll send it anyway... :) > > -- > Dee Earley (dee.earley(a)icode.co.uk) > i-Catcher Development Team > > iCode Systems > > (Replies direct to my email address will be ignored. > Please reply to the group.) > . > |