After some experimenting, I found:
- Create user event: EV_SET(&ev, identifier, EVFILT_USER, EV_ADD, NOTE_FFCOPY, 0, NULL )
- Destroy user event: EV_SET(&ev, identifier, EVFILT_USER, EV_DELETE, 0, 0, 0)
- Set user event: EV_SET( &event, m_eventId, EVFILT_USER, EV_ENABLE, NOTE_FFCOPY|NOTE_TRIGGER|0x1, 0, NULL )
- Reset user event: EV_SET( &event, m_eventId, EVFILT_USER, EV_DISABLE, EV_CLEAR|NOTE_FFCOPY, 0, NULL )
- Pulse user event: Not tested...did use case 1 for now.
- Wait code snippet: As given in original post.
Test works like a charm. In my test I did the NOTE_FFCOPY thing but I don't think it is necessary.
The user events have 2 states - signalled, not signalled. EV_ENABLE and EV_DISABLE set those states it seems.
The test verified, that the events in signalled state actually are reported by kevent() repeatedly.