Receiving a pulse is very simple: a tiny, well-defined message is presented to the MsgReceive(), as if a thread had sent a normal message. The only difference is that you can't MsgReply() to this message—after all, the whole idea of a pulse is that it's asynchronous. In this section, we'll take a look at another function, MsgReceivePulse(), that's useful for dealing with pulses.
The only funny thing about a pulse is that the receive ID that comes back from the MsgReceive() function is zero. That's your indication that this is a pulse, rather than a regular message from a client. You'll often see code in servers that looks like this:
#include <sys/neutrino.h> rcvid = MsgReceive (chid, …); if (rcvid == 0) { // it's a pulse // determine the type of pulse // handle it } else { // it's a regular message // determine the type of message // handle it }