[fpc-devel] SimpleIPC and TWinMsgServerComm.PeekMessage
juha.manninen62 at gmail.com
Wed Oct 9 10:40:45 CEST 2013
I am testing SimpleIPC with components/chmhelp/lhelp
The latter works as a master application, sending a file name to lhelp
and starting it if not running already.
On Linux this works perfectly. The return message status is always "Success".
On Windows there is a bug when lhelp is not yet running and it must be started.
In TWinMsgServerComm.PeekMessage() (part of SimpleIPC),
if Windows.PeekMessage() failed, the idea is to wait a given TimeOut
and then try again:
The caller gives 50 ms as timeout but also uses a loop for 5 seconds
It should be enough for even slowly starting processes.
However, when the process does not exist yet,
MsgWaitForMultipleObjects returns WAIT_FAILED instead of WAIT_TIMEOUT,
and it does NOT wait. It returns immediately.
I was able to fix it like this:
if R=WAIT_FAILED then
B:=(R<>WAIT_TIMEOUT) and (R<>WAIT_FAILED);
The fix can be tested with lhelpconnectiondemo1.
Currently the first reply status is NoAnswer, after the fix it is Success.
If you think the fix is OK, I can make a patch.
More information about the fpc-devel