libevent:关于事件优先级和`event_priority_set()`的一些问题

时间:2013-06-19 10:50:03

标签: network-programming epoll libevent

我对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)的位置是否正确,所以我不知道是否设置了优先级。

1 个答案:

答案 0 :(得分: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_add())上使用event_priority_set()。

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