![]() |
![]() |
![]() |
Send a pulse to a channel
#include <sys/neutrino.h> int MsgSendPulse ( int coid, int priority, int code, int value ); int MsgSendPulse_r ( int coid, int priority, int code, int value );
libc
The MsgSendPulse() and MsgSendPulse_r() functions are identical except in the way they indicate errors. See the Returns section for details.
These kernel calls send a short nonblocking message to a process's channel identified by coid. This connection coid is established by calling ConnectAttach(). The pulse data are passed as arguments and consist of an 8-bit code and a 32-bit value. The priority argument must be within the range of valid priorities, that you can discover using sched_get_priority_min() and sched_get_priority_max().
You can send a pulse to any process in your process group if you have the appropriate permissions to drop a signal on another process (permission checking is identical to the checking used by the kill() function).
The MsgSendPulse() function can be used for many purposes; however, due to the small payload of data it shouldn't be used for transmitting large amounts of bulk data by sending a great number of pulses. Pulses are queued for the receiving process in the system using a dynamic pool of memory objects. If pulses are generated faster than they can be consumed by the receiver, then over a period of time the system queue for the pulses could reach a low memory condition. If there's no memory available for the pulse to be queued in the system, the kernel fails the pulse request with an error of EAGAIN. If the priority, code and value don't change, the kernel performs pulse compression by storing an 8-bit count with an already queued pulse.
When a pulse is received by the MsgReceive*() kernel call, the rcvid returned is zero. This indicates to the receiver that it's a pulse and unlike a message, shouldn't be replied to using MsgReply*().
Although code can be any 8-bit signed value, programs should avoid code values less than zero in order to avoid conflict with kernel or QNX manager generated pulse codes. These codes all start with _PULSE_CODE_ and are defined in <sys/neutrino.h>. A safe range of pulse values is _PULSE_CODE_MINAVAIL to _PULSE_CODE_MAXAVAIL.
![]() |
In a client/server designs MsgDeliverEvent() is typically used in the server, and MsgSendPulse() in the client. |
None. In the network case, lower priority threads may run.
Currently, the MsgSendPulse() function can't be used to send pulses across the network.
The only difference between the MsgSendPulse() and MsgSendPulse_r() functions is the way they indicate errors:
Safety: | |
---|---|
Cancellation point | No |
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |
If the server faults on delivery, the pulse is either lost or an error is returned.
MsgDeliverEvent(), MsgReceive(), MsgReceivev(), sched_get_priority_min(), sched_get_priority_max()
![]() |
![]() |
![]() |