[fpc-pascal] RTLEventWaitFor

Martin Frb lazarus at mfriebe.de
Tue Apr 5 11:51:59 CEST 2022


On 05/04/2022 01:03, Mattias Gaertner via fpc-pascal wrote:
> Under Linux a RTLEventWaitFor(e,1) usually waits at most 1ms. But under
> Windows it usually waits at least 15ms. It seems to round to nearest
> 1/64 of a second.
>
> Has anyone an idea if this is normal on Windows and if there is an
> alternative?

As for the alternative bit.... Maybe

I have some code in  components\fpdebug\fpdbgutil.pp (e.g, one side in 
TFpThreadWorkerItem.WaitForFinish) doing the following. (simplified version)
- Thread T1 => Worker: sets event when ready
- Thread T2 => Controller: waits for event. (But could easily be 
extended to just check the state, without waiting)

Both threads use a variable via InterlockedExchange.
- The variable starts with TWSTATE_RUNNING => T1 is busy
- When T1 finished, and T2 does not yet wait (See below): It sets 
TWSTATE_DONE

- When T2 needs the result:
   ~ if the state is TWSTATE_DONE then it never needs to call RtlEventWait
      ====> not calling RtlEventWait => no timeout needed at all
   ~ Otherwise it sets TWSTATE_WAIT_WORKER, and calls RtlEventWait
      (In this case no timeout either, as it waits until the event comes)
     ==> But instead of calling RtlEventWait  it could return the state.

- When T1 finished, and T2 does wait (TWSTATE_WAIT_WORKER)
   then T1 sets the event to signal T2




More information about the fpc-pascal mailing list