libevent: คำถามบางข้อเกี่ยวกับลำดับความสำคัญของกิจกรรมและ `event_priority_set()`

ฉันมีคำถามบางอย่างเกี่ยวกับลำดับความสำคัญของกิจกรรมเสรี

1 ช่วงหมายเลขลำดับความสำคัญคืออะไร?

2 ในคู่มือเขียนว่า By default, libevent assigns the middle priority to all events unless their priority is explicitly set. แล้วหมายเลขลำดับความสำคัญเริ่มต้นที่แน่นอนคืออะไร?

3 เมื่อลำดับความสำคัญสูงกว่า จำนวนจะน้อยลงหรือมากขึ้น?

4 มีสองฟังก์ชันที่เกี่ยวข้องกับลำดับความสำคัญของเหตุการณ์ในชีวิต 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 บลาบา

BTW: ปัจจุบันฐานของฉัน = 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)


ไม่มีอะไรที่นี่ที่คุณจะไม่พบคำตอบในหนังสือดีๆ ที่เขียนโดย Nick:

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() ไม่ส่งคืนข้อผิดพลาด แสดงว่าลำดับความสำคัญถูกกำหนดไว้ มิฉะนั้นอาจเป็นข้อผิดพลาดในชีวิตจริง ดูตัวอย่างในลิงก์ที่ฉันให้ไว้เมื่อวาน ในส่วนเหตุการณ์ที่มีลำดับความสำคัญ - person Remi Gacogne; 20.06.2013