[DUG] Hang during Sleep
Ross Levis
ross at stationplaylist.com
Tue May 15 15:02:13 NZST 2012
I was using ProcessMessages in the sleep loop but it was causing problems and was removed. I don’t recall the problem now but I think some event was being executed while in the loop and caused some problem. I went to some trouble to not use it as you will see below.
But I might try adding it back for this user and see if it helps.
Here is the procedure the sleep function is in.
procedure StudioForm.LoopSleep(Duration: Integer);
var
TickCount, LastCount, StartCount: Cardinal;
TimerStatus: Boolean;
Msg: TMsg;
begin
TimerStatus := Timer.Enabled;
Timer.Enabled := False;
TickCount := GetTickCount;
StartCount := TickCount;
LastCount := TickCount;
while GetTickDiff(StartCount,TickCount) <= Duration do
begin
Sleep(5);
if GetTickDiff(LastCount,TickCount) >= 20 then // update every 20ms
begin
LastCount := TickCount;
TimerTimer(nil); // update elapsed, VU, etc
PeekMessage(Msg, StudioForm.Handle , 0, 0, PM_NOREMOVE); // tells Windows 7 app is not hung
StudioForm.Update;
end;
TickCount := GetTickCount;
end;
Timer.Enabled := TimerStatus;
end;
GetTickDiff is a small Indy function which handles the situation if the tick count rolls over to 0 after 49 days.
Regards,
Ross.
From: delphi-bounces at listserver.123.net.nz [mailto:delphi-bounces at listserver.123.net.nz] On Behalf Of Pieter De Wit
Sent: Tuesday, 15 May 2012 5:26 a.m.
To: NZ Borland Developers Group - Delphi List
Subject: Re: [DUG] Hang during Sleep
Ross Levis <ross at stationplaylist.com> wrote:
Hi Pieter
Bugreport.txt is attached.
It is a media player, and there are short pauses in some areas, such as to wait for the player process to come back from executing a command before executing another one.
The player itself is a separate process controlled by this one using shared memory.
The sleep is in a procedure which loops around for a set period (100ms in this case) with a sleep(5) and a MainForm.Update so VU meters continue moving.
Cheers,
Ross.
From: delphi-bounces at listserver.123.net.nz [mailto:delphi-bounces at listserver.123.net.nz] ! On Behalf Of Pieter De Wit
Sent: Monday, 14 May 2012 9:47 p.m.
To: NZ Borland Developers Group - Delphi List; 'NZ Borland Developers Group - Delphi List'
Subject: Re: [DUG] Hang during Sleep
Ross Levis <ross at stationplaylist.com> wrote:
Perhaps someone can offer some clues to the problem. A user is experiencing a hang during a Sleep(5) function! It’s Win7 64-bit Hyperthreaded Intel 4 core CPU.
With MadExcept, it is showing the following…
!
exception message : The application seems to be frozen.
main thread ($9f4):
771dfd6a ntdll.dll NtDelayExecution
75ce31b5 KERNELBASE.dll SleepEx
75c! e3a86 KERNELBASE.dll Sleep
005dc66b SPLStudio.exe StudioMain 6808 +9 LoopSleep
3 known threads are sitting at a Synchronize/NtWaitForSingleObject waiting for the current procedure in the main form to finish, which is sitting at Sleep(5). I would expect that.
Another thread is also sitting at NtWaitForSingleObject but it doesn’t say what the thread class name is so not sure what ! it is.
Another unknown thread is at NtWaitForMultipleObjects.
And another unknown t! hread is at NtWaitForWorkViaWorkerFactory.
I know about the 3 threads waiting at Synchronize, but they shouldn’t be a problem.
What can cause a Sleep(5) to hang for over 90 seconds?
I can send the full bugreport.txt file if useful.
Thanks,
Ross.
Hi Ross,
Bugreport.txt will be usefull plus a short desc as to why you sleeping and what the app is waiting for?
Cheers,
Pieter
--
Sent from my Android phone. Please excuse my brevity.
Hi Ross,
I view you bug report on my mobile, so i might have missed it, but run application.processmessage (); before your sleep and after as well.
Cheers
Pieter
--
Sent from my Android phone with K-9 Mail. Please excuse my brevity.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20120515/4932f4f1/attachment.html
More information about the Delphi
mailing list