On Mon, May 16, 2016 at 9:01 AM, Bo Berglund <bo.bergl...@gmail.com> wrote:
> The Execute procedure handles everything going on and it acts on event > signals picked up (I believe) by the WaitForMultipleObjects calls. > > What I would like to know is how exactly to handle this in FreePascal > on Linux.... > I presume FConnectEvent, FDisconnectEvent (and others) are of TEvent type (from FCLs syncobjs) In this case, I'd think you could implement WaitForMultipleObjects() yourself, via a simple event waiting loop: uses ... syncobjs, SysUtils ; const WAIT_TIMEOUT = $102; function WaitForMultipleObject(cnt : integer; const handle: array of TEventHandle; waitforall: Boolean; timeOutMls: integer): integer; var event : Integer; evNum : integer; i : integer; ev : array of boolean; wr : TWaitResult; any : Boolean; d : TDateTime; // please forgive the usage of now() :) dm : integer; const YIELD_TIME=0; begin evNum:=0; SetLength(ev, cnt); Result:=WAIT_TIMEOUT; // create a loop of waiting for each event to fire repeat any:=false; if timeOutMls>0 then d:=now; for i:=0 to cnt-1 do if not ev[i] then begin // refer to synobj sources for .WaitFor() method of TEvent wr:=TWaitResult(basiceventWaitFor(0, Handle[i])); if wr=wrSignaled then begin ev[i]:=true; inc(evNum); Result:=i; if not waitforall then Break; end; end; if not any and (timeOutMls>0) then begin // if has timeout, must yeld the time for some time // and then repeat the try Sleep(YIELD_TIME); if timeOutMls>0 then begin d:=now-d; dm:=round(d*MSecsPerDay); dec(timeOutMls, dm); if (timeOutMls<0) then timeOutMls:=0; end; end; // btw, actual support for "waitforall" is not needed in this case until (evNum>0) and (not waitforall or (cnt=evNum)) or (timeOutMls=0); if waitforall and (evNum>0) then Result:=0; end; I've not tested this loop, but it should give you an idea of what you could do. The fact that you're using the handles of the same type allows you to implement the loop yourself. thanks, Dmitry
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal