[fpc-pascal] How to find where my app consumes CPU?
Bo Berglund
bo.berglund at gmail.com
Wed May 19 00:29:17 CEST 2021
On Tue, 18 May 2021 21:40:15 +0000, Alexander Grotewohl via fpc-pascal
<fpc-pascal at lists.freepascal.org> wrote:
>if it's waiting on keyboard input you might be better off using select() for
>that instead of looping and checking for keyboard input each go around.
>
>sleep() might already do something similar with a zero timeout but even that
>would probably be insufficient
As I tried to explain at the start of this thread my application runs as a
*systemd service* on Linux, so there is absolutely no keyboard input.
The main program looks like this after initializations etc:
try
try
bSTerm := False;
bSInt := False;
bsHup := False;
{$IFDEF UNIX}
fpSignal(SigTerm, SignalHandler(@handleSignal));
fpSignal(SigInt, SignalHandler(@handleSignal));
fpSignal(SigHup, SignalHandler(@handleSignal));
{$ENDIF}
Debug_Writeln('Enter eternal loop');
FLogServ.StdLog('Enter eternal loop');
While not (bSTerm or bSInt or bsHup) do
begin
//Here is where the server runs as defined elsewhere
//Eternal loop to wait for system messages
Sleep(1); //To not hog the CPU
CheckSynchronize; //To get thread comm working
end;
Debug_Writeln('Exit eternal loop');
FLogServ.StdLog('Exit eternal loop');
except
on E: Exception do
begin
FLogServ.ExceptionLog('Unhandled exception: ' + E.Message);
end;
end;
finally
ShutdownServer;
end;
As you can see it sits in the eternal loop until the system sends a "signal" to
it to stop. So systemd does that if I issue a sudo systemctl stop myservice and
this works fine.
Could this tiny loop consume 6-7% CPU cycles?
--
Bo Berglund
Developer in Sweden
More information about the fpc-pascal
mailing list