XlTQOpsImpl.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
DIRECTORY
ForkOps, Process, Xl, XlTQOps, XlTQPrivate;
XlTQOpsImpl: CEDAR PROGRAM
IMPORTS ForkOps, Xl
EXPORTS Xl, XlTQOps =
BEGIN
<<Xl.>>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] = {
Not monitored; but defs says that number might change anytime...
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.