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] = { 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. fXlTQOpsImpl.mesa Copyright Σ 1991, 1992 by Xerox Corporation. All rights reserved. Christian Jacobi, March 11, 1991 4:17 pm PST Christian Jacobi, April 19, 1993 10:51 am PDT --Like Xl.Enqueue but delayed by approximatively ms millliseconds. --Time delay like in DelayedFork.ForkSoon. Not monitored; but defs says that number might change anytime... ΚΏ•NewlineDelimiter –(cedarcode) style˜code™Kšœ Οeœ7™BKšœ,™,K™-—K˜šΟk ˜ K˜+K˜—šΟn œžœž˜Kšžœ ˜Kšžœ˜—Kšžœ˜K˜Kšœžœžœ˜.K˜šœ žœžœ˜Kšœ ˜ Kšœ˜Kšœžœžœ˜Kšœž˜Kšœ˜K˜—šŸœžœžœ˜Kšœžœ žœ˜Kšœ)˜)Kšœ˜K˜—šŸ œžœžœžœ/žœžœžœ˜uKšœB™BK™*Kšœžœ žœ;˜OK˜YKšœ˜—K˜š Ÿ œžœžœ žœžœžœ˜9Kšœ@™@Kšœ˜Kšžœžœžœ ΟcB˜uK˜K™—Kšžœ˜K˜—…—x