libevent: beberapa pertanyaan tentang prioritas acara dan `event_priority_set()`

Saya punya beberapa pertanyaan tentang prioritas acara libevent

1 berapa kisaran nomor prioritasnya?

2 di manual, tertulis By default, libevent assigns the middle priority to all events unless their priority is explicitly set. jadi berapa nomor prioritas default sebenarnya?

3 ketika prioritas lebih tinggi, jumlahnya lebih kecil atau lebih besar?

4 Ada dua fungsi yang terkait dengan prioritas acara di libevent. event_priority_init() dan event_priority_set, apa perbedaan keduanya?

5 berapa nilai pengembalian untuk event_priority_set(struct event *ev, int pri)? Saya melihat sebuah artikel mengatakan sesuatu seperti: when an event is ready, it can't be set and calling of this function returns -1. Saya benar-benar tidak mengerti apa maksudnya ini? adakah yang bisa menjelaskan sedikit? terima kasih!

6 dapatkah saya mengubah prioritas acara setelah didaftarkan. Misal awalnya saya atur prioritasnya ke 10, nanti saya atur ke 5, lalu saya atur ke 10, blalba

BTW: saat ini, basis saya = event_init(); event_base_priority_init(basis, 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);

itu berjalan tanpa kesalahan, tapi saya tidak tahu apakah tempat event_priority_set(&ev, 2) sudah benar atau belum, jadi saya tidak tahu apakah prioritasnya sudah diatur atau belum.


person misteryes    schedule 19.06.2013    source sumber


Jawaban (1)


Tidak ada apa pun di sini yang tidak akan Anda temukan jawabannya dalam buku hebat yang ditulis oleh Nick :

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

1/ Anda mengatur rentang dengan memanggil event_base_priority_init().

2/ Jika Anda tidak mengatur prioritas, " defaultnya adalah jumlah antrian di basis acara, dibagi 2."

3/ Angka yang lebih rendah adalah prioritas yang lebih tinggi.

4/ Anda harus menggunakan event_base_priority_init() daripada event_priority_init() yang sudah tidak digunakan lagi. event_base_priority_init() mengatur jumlah prioritas basis, sedangkan event_priority_set() mengatur prioritas suatu acara.

5/ Anda tidak dapat menggunakan event_priority_set() pada loop acara yang sudah ditambahkan (event_add()).

6/ Anda harus menghapusnya dari loop acara dengan event_del() terlebih dahulu.

person Remi Gacogne    schedule 19.06.2013
comment
the default is the number of queues in the event base. berapa jumlah antrian default di basis acara? - person misteryes; 19.06.2013
comment
Secara default hanya ada satu antrian prioritas. - person Remi Gacogne; 19.06.2013
comment
untuk 5, maksud Anda event_priority_set() harus sebelum event_add(), silakan lihat pembaruan saya. terima kasih! - person misteryes; 20.06.2013
comment
Jika event_priority_set() tidak mengembalikan kesalahan, prioritas telah ditetapkan. Kalau tidak, kemungkinan besar itu adalah bug di libevent. Lihat contohnya pada link yang saya berikan kemarin, pada bagian Event dengan Prioritas. - person Remi Gacogne; 20.06.2013