<> <> <> <> DIRECTORY ForkOps, Process, Xl, XlTQOps, XlTQPrivate; XlTQOpsImpl: CEDAR PROGRAM IMPORTS ForkOps, Xl EXPORTS Xl, XlTQOps = BEGIN <>TQRep: PUBLIC TYPE = XlTQPrivate.TQRec; ForkRec: TYPE = RECORD [ tq: Xl.TQ, proc: Xl.EventProcType, data: REF ¬ NIL, event: Xl.Event ¬ NIL ]; ReFork: PROC [data: REF] = { d: REF ForkRec ¬ NARROW[data]; Xl.Enqueue[d.tq, d.proc, d.data, d.event] }; EnqueueSoon: PUBLIC PROC [ms: INT ¬ 0, tq: Xl.TQ, proc: Xl.EventProcType, data: REF ¬ NIL, event: Xl.Event ¬ NIL] = { <<--Like Xl.Enqueue but delayed by approximatively ms millliseconds.>> <<--Time delay like in DelayedFork.ForkSoon.>> d: REF ForkRec ¬ NEW[ForkRec ¬ [tq: tq, proc: proc, data: data, event: event]]; ForkOps.ForkDelayed[ms: ms, proc: ReFork, data: d, priority: Process.priorityForeground]; }; CountProcs: PUBLIC PROC [tq: Xl.TQ] RETURNS [n: CARD] = { <> n ¬ tq.eventCount; IF tq.selfRunning OR tq.lockCount>0 THEN n ¬ n+1; --count multiple locks as one; but I don't know whether it matters }; <<>> END.