[fpc-pascal] Reading Serial Hex Data

Bo Berglund bo.berglund at gmail.com
Mon Dec 28 15:14:20 CET 2020


On Mon, 28 Dec 2020 14:12:02 +0100, Jean SUZINEAU via fpc-pascal
<fpc-pascal at lists.freepascal.org> wrote:

>Le 28/12/2020 à 13:16, Bo Berglund via fpc-pascal a écrit :
>>          Synchronize(CallEvent); //Supply received data in FBuffer to
>> caller
>
>You are using TThread.Synchronize.
>
>In a console app, it's likely that somewhere else in your main thread 
>you'll need to call regularly Classes.CheckSynchronize to allow the 
>actual execution of CallEvent.
>
>In my case, linux server dll called by a 4js 4GL console program (no GUI 
>on linux server), I need to call regurlarly Classes.CheckSynchronize 
>froml 4gl through function exported by the pascal code.
>If I don't do this, the CallEvent is nether called.
>

Where I use the fpserial class for communications over RS232 there is
an "eternal" loop in the main program, which for a console program is
what is really running:

{$IFDEF UNIX} //What to do for system messages
procedure handleSignal(signum: CInt); cdecl;
begin
  case signum of
    SIGHUP : bSHup := true;
    SIGTERM : bSTerm := true;
    SIGINT : bSInt := true
  end;
end;
{$ENDIF}

program
  //Create all objects and start processes
  ....
  {$IFDEF UNIX} //Make sure there is a signal handler
    fpSignal(SigTerm, SignalHandler(@handleSignal));
    fpSignal(SigInt, SignalHandler(@handleSignal));
    fpSignal(SigHup, SignalHandler(@handleSignal));
  {$ENDIF}
  //Now wait for signals:
  While not (bSTerm or bSInt or bsHup) do //React to system signals
  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; //Enable events to fire off handlers
  end;
  //cleanup and exit
  ...
end.

The program is intended to run as a Linux service and so it reacts to
the service manager's messages which are coming in via the
handleSignal procedure.

The main action is controlled by socket handlers started by the
preliminaries in the main program and which are triggered by events
from various sources like TCP/IP connections, timers etc.


-- 
Bo Berglund
Developer in Sweden



More information about the fpc-pascal mailing list