[DUG] Hang during Sleep

David Moorhouse delphi at moorhouse.net.nz
Tue May 15 19:01:10 NZST 2012


You may also want to take a look at the PostThreadMessage API, which you 
can use to signal from a thread back to the main thread or vice versa

HTH

David



On 15/05/12 18:53, Jolyon Smith wrote:
> Do your UI updates on the main thread and find some other way of 
> communicating what the UI thread needs to update itself.  i.e. 
> decouple your UI from the data it visualises.
>
>
>     PreloadSong;
>
>     WaitForEngine; // does a LoopSleep
>
>     SetCuePosition;
>
>     WaitForEngine;
>
>     StartPlay;
>
>     etc.
>
>
> Do this in a worker thread then your UI can continue to update on the 
> main thread without having to worry about anything else.  You're right 
> that the VCL isn't thread safe, but it's easier to make your data 
> sources thread safe so that the VCL main thread can access them safely 
> along with any worker threads, than it is to try to make the main VCL 
> thread behave as if it were effectively multiple threads (which is 
> what you are trying to do by having it do work, update the UI AND pump 
> the message queue).
>
> Also, the fact that your routine is called "WaitForEngine" suggests to 
> me that an event would be ideal in your situation.  If accurately 
> named, that routine indicates that your worker thread is waiting for 
> some signal that the engine is ready, a signal that the engine can 
> send directly using an event (i.e. a TEvent - a thread synchronisation 
> object, not a TNotifyEvent or similar), rather than using a busy-wait 
> loop.
>
> It may not be a solution as quick and easy as throwing in a call to 
> Application.ProcessMessages, but I am pretty confident that it will 
> absolutely be more robust in the long run.
>
> At least, that's the way I'd tackle this problem.
>
> :)
>
>
> _______________________________________________
> NZ Borland Developers Group - Delphi mailing list
> Post: delphi at listserver.123.net.nz
> Admin: http://delphi.org.nz/mailman/listinfo/delphi
> Unsubscribe: send an email to delphi-request at listserver.123.net.nz with Subject: unsubscribe

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20120515/6bc09aad/attachment-0001.html 


More information about the Delphi mailing list