OK, here is the situation:
I have a very old set of programs designed about 2003-2004 with Delphi7, later moved to Delphi2007, and running on WindowsXP.
One is a Windows service and the other is a regular GUI program for connecting to the service to do configuration and maintenance and retrieve measurement results. The service schedules regular measurement runs using a hardware data collection system controlled via RS232.
Recently it has become increasingly difficult to get the system reliably running on Windows, it was possible up until Win 7, but now that is no longer possible and Win10 is a PITA due amongst other things to the fact that it insists on rebooting without warning at any time it sees fit.
So I am working on porting the system to Linux instead, specifically to Raspberry Pi, so I will get a stable platform.
But when doing so I have had to invent new components for the TCP/IP and RS232 handling as well as for digital I/O, which was originally using the ISA bus printer port.
So I have created a derivative of the Indy10 IdTcpClient, which has a read thread built in such that I can have the incoming data supplied via an event (Indy itself is blocking and thus much more difficult to use when porting the applications which are built around the event model).
The server runs as a regular non-GUI program and I had to add CheckSynchronize to the main program loop to get the TCP/IP receive event working properly.
I am using the same custom TCP/IP object in the client application and here I am looking for the location to put the CheckSynchronize call since there is no user visible main program loop AFAICT.
Yesterday I finally got both ported programs to build on both Linux and Windows so I could test them and the results indicate that my Lazarus client on Windows does not see the incoming data from the server, whereas the old Windows Delphi client does if I use that to talk to the Linux server.
I have yet to start debugging from within Lazarus, but my suspicion is that the missing part is the absence of the CheckSynchronize call. I might be wrong though and the problem is elsewhere...
OOPS,
while typing this @PascalDragon states that LCL does this in a GUI program. If so the problem is something else...