1

我对 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,blalba

顺便说一句:目前,我的 base = event_init(); event_base_priority_init(base, 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)是否正确,所以我不知道是否设置了优先级。

4

1 回答 1

2

在尼克写的这本伟大的书中,没有什么是你找不到答案的:

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_add()) 上使用 event_priority_set()。

6/ 您需要先使用 event_del() 从事件循环中删除它。

于 2013-06-19T14:32:14.120 回答