Я пытаюсь использовать libev для программирования на основе событий. Но есть некоторые события, предоставляемые libev, как EV_READ, EV_WRITE, EV_TIMER ..
Итак, возможно ли провести собственное мероприятие самостоятельно.
Например, у меня есть непрерывный поток сообщений из сокета, и меня интересует только тип сообщения в этом потоке сообщений. Итак, это в основном как
while(true)
{
Msg msg = getMessage();
if(msg != null && msg.id == ourId)
return msg;
}
Итак, я хочу зарегистрироваться для такого рода событий (только if
состояние выполнено.). Это собственное событие, верно? Как мне указать это событие для libev.
Я имею в виду в LIVEV мы указываем, как это ..
ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ);
ev_io_start (loop, &stdin_watcher);
Я не вижу каких-либо вещей, где мы можем проверить наши собственные события. Является ли это возможным ?
К сожалению, у вас не может быть пользовательского события, потому что libev не манипулирует вашими данными, просто проверяет, есть ли они, или если вы можете отправить их.
В общем, вам нужно:
EV_READ
ev_loop
в идеале с EV_ONESHOT
и наблюдатель тайм-аута. Сразу после этого вызовите ваш обработчик сообщений, который проверит очередь сообщений и обработает все сообщения, которые находятся в очереди.Других решений пока нет …