All Manuals > LispWorks® User Guide and Reference Manual > 42 The MP Package

process-send Function


Sends an object to the mailbox of a given process.




process-send process object &key change-priority limit timeout error-if-dead-p => success

A process.
An object.
A fixnum, nil, t, or :default.
An integer or nil.
A non-negative real or nil.
A generalized boolean.
A boolean.

The function process-send queues object in the mailbox of the given process.

object can any kind of Lisp object, and it is up to the receiving process to interpret it.

process-send only sends the event: it is the responsibility of the receiving process to actually read the event and then interpret it. Reading is typically done by calling process-wait-for-event. Interpreting the event is up the caller of process-wait-for-event. In the "standard" situation, for example in a process started by CAPI, the object will be processed as an event by calling general-handle-event.

process-send actually uses the process-mailbox of process, creating a mailbox for process if it does not already have one. In principle object can be read by another process, by calling mailbox-read (or process-wait-for-event) on the mailbox.

If change-priority, which has a default value of :default, is non-nil, it controls how the priority of that process is calculated as follows:

error-if-dead-p defaults to nil, which means that if process-send is called with a dead process, it just returns false. If error-if-dead-p is non-nil, when process-send is called on a dead process it signals a continuable error.

limit defaults to nil. If it is non-nil, it must be a positive integer that specifies the maximum size to which process-send may expand the mailbox of the process. When limit is non-nil. process-send adds the object to the mailbox as if by:

(mailbox-send-limited mailbox object limit timeout)

See mailbox-send-limited for details.

timeout defaults to nil and is used when limit is non-nil as described above, otherwise it is ignored.

process-send returns true if it put the object in the mailbox of the process and false otherwise. The latter can happen either because the process is dead, or because the process's mailbox is full and reached the size specified by limit and timeout is non-nil.

See also

19.6.3 Communication between processes and synchronization

LispWorks® User Guide and Reference Manual - 01 Dec 2021 19:30:51