libevent: некоторые вопросы о приоритете события и `event_priority_set()`

У меня есть несколько вопросов о приоритете события libevent

1 каков диапазон приоритетных номеров?

2 в руководстве написано By default, libevent assigns the middle priority to all events unless their priority is explicitly set., так каков точный номер приоритета по умолчанию?

3 когда приоритет выше, число меньше или больше?

4 В libevent есть две функции, связанные с приоритетом события. event_priority_init() и event_priority_set, в чем между ними разница?

5 какие возвращаемые значения для event_priority_set(struct event *ev, int pri)? Я заметил, что в статье говорится что-то вроде: when an event is ready, it can't be set and calling of this function returns -1. Я действительно не понимаю, что это значит? кто-нибудь может немного объяснить? Благодарность!

6 могу ли я изменить приоритет события после его регистрации. Например, в начале я поставил приоритет 10, позже поставил 5, потом поставил 10, блальба

Кстати: в настоящее время моя база = event_init(); event_base_priority_init (база, 4);

event_set(ev, sockfd, EV_READ, callback, arg);
event_base_set(base, ev);
event_add(ev, NULL);
event_priority_set(&ev, 2);

 .....
 // set and add some other events
 ....

event_base_dispatch(base);

он работает без ошибок, но я не знаю правильное место event_priority_set(&ev, 2) или нет, поэтому я не знаю, установлен ли приоритет или нет.


person misteryes    schedule 19.06.2013    source источник


Ответы (1)


Здесь нет ничего, на что вы не найдете ответа в великой книге, написанной Ником:

http://www.wangafu.net/~nickm/libevent-book/Ref4_event.html

1/Вы устанавливаете диапазон, вызывая event_base_priority_init().

2/ Если вы не установили приоритет, «по умолчанию используется количество очередей в базе событий, деленное на 2».

3/ Чем меньше число, тем выше приоритет.

4/Вы должны использовать event_base_priority_init() вместо event_priority_init(), который устарел. event_base_priority_init() устанавливает номер приоритета для базы, а event_priority_set() устанавливает приоритет для события.

5/Вы не можете использовать event_priority_set() для уже добавленного в цикл событий (event_add()).

6/ Сначала вам нужно удалить его из цикла событий с помощью event_del().

person Remi Gacogne    schedule 19.06.2013
comment
the default is the number of queues in the event base. какое количество очередей по умолчанию в базе событий? - person misteryes; 19.06.2013
comment
По умолчанию имеется только одна приоритетная очередь. - person Remi Gacogne; 19.06.2013
comment
для 5 вы имеете в виду, что event_priority_set() должно быть перед event_add(), пожалуйста, посмотрите мое обновление. Благодарность! - person misteryes; 20.06.2013
comment
Если event_priority_set() не возвращает ошибку, устанавливается приоритет. В противном случае это, скорее всего, ошибка в libevent. См. пример по ссылке, которую я дал вчера, в разделе События с приоритетами. - person Remi Gacogne; 20.06.2013