<span style>&gt; Still wondering how a sleep can hang.</span><div><br></div><div>This is actually quite easily explained.<div><br></div><div>Sleep() is an indication to the Windows thread scheduler that your thread is willing to relinquish whatever timeslice it currently has.  Whether and when that thread get&#39;s another bite at the CPU is now in the hands of the Windows Scheduler.<br>
<br>&quot;Sleep(100)&quot; comes with no guarantee that your thread will resume execution after 100 milliseconds, all it ensures is that your thread stops running and absolutely won&#39;t run again for AT LEAST that time (give or take, subject to clock resolution).  If there are other higher priority threads demanding access to the CPU then your thread can easily find itself being shunted to the bottom of the queue until those threads have done ALL their work.</div>
<div><br></div><div>Given the nature of the application you describe, which seems to involve some sort of multimedia content, I am guessing that even within your process - never mind anything else that might be running on the same machine - you have one or more other threads that you have most likely set to higher than normal priority - the nature of multimedia being what it is, you may even have a &quot;realtime&quot; priority thread in the mix somewhere.<br>
<br>That would easily explain why when you relinquish your main UI thread&#39;s timeslice it doesn&#39;t get a look-in until much, much later than you are expecting.<br></div></div>