Signals are used as a synchronization mechanism. They are used for signaling other tasks that a certain event has occurred. Signals correspond to Event objects in Win32.
For example, one thread can create a signal to wait for arriving messages.
    #include <oops/r3signal.h>
    signal = R3New(R3CLID_SIGNAL,
                   R3TAG_END);
    for(;;) {
        /* wait (sleep) until somebody signals us up */
        R3DoA(signal, R3SIGM_WAIT, NULL);
        /* somebody wants us to do something */
        ...
    }
The sender task code might look as follows:
    /* prepare data for the thread */
    ...
    /* wake up the thread */
    R3DoA(signal, R3SIGM_SET, NULL);