Чтобы дать немного больше контекста ...
Одним из ожидаемых сценариев с KEVENT() является то, что вы пул потоков вызовов к нему. Если у вас было 3 пула потоков, которые запрашивали 4 события, ОС хотела бы иметь возможность собирать и отправлять фактические события по своему усмотрению.
Если доступно 7 событий, ОС может захотеть отправить 3 потокам, или, возможно, захочет отправить все 3 потока, если будет считаться, что у них пустые ядра и меньше накладных расходов.
Я не говорю, что ваш сценарий недействителен вообще; просто для того, чтобы система была более или менее сконструирована так, чтобы держать эту информацию от вас, чтобы она не попадала в сценарии «хорошо, 12 дескрипторов готовы. О, хм, я просто сказал вам, что, но 3 из них всплыли, прежде чем у вас была возможность сделать что-нибудь ».
Grrr в значительной степени прибил сценарий. Вы регистрируете/дешифруете свои дескрипторы один раз, и соответствующий дескриптор будет предоставлен вам с событием, когда событие срабатывает.
Не нужно ли передавать дескриптор файла с помощью вызова kevent? Думаю, мне нужно будет поиграть с этим еще немного. – clee
Вы используете призыв «kevent» как для регистрации вашего интереса к событиям определенного типа, так и для получения событий, которые на самом деле происходят. Вы можете объединить его в один звонок, но вам этого не нужно. Когда вы зарегистрируете интерес к файловому дескриптору, 'kevent' сообщит соответствующие события для этого дескриптора, если вы не использовали' EV_ONESHOT', или не удалили событие, или не закрыли дескриптор. – Grrrr