Interrupt service routines

QNX 4's interrupt service routines had the ability to either return a proxy ID (indicating that the proxy should be sent to its owner) or a zero, indicating nothing further needed to be done. Under QNX Neutrino, this mechanism is almost identical, except that instead of returning a proxy, you're returning a pointer to a struct sigevent. The event that you return can be a pulse, which will give you the "closest" analog to a proxy, or it can be a signal or the creation of a thread. Your choice.

Also, under QNX 4 you had to have an interrupt service routine, even if all that the ISR did was return a proxy and nothing else. Under QNX Neutrino, using InterruptAttachEvent(), you can bind a struct sigevent to an interrupt vector, and that event will be delivered every time the vector is activated.