Libevent の使い方を学んでいます。保留とアクティブの違いがわかりません。私の意見では、event_base にイベントが追加され、イベントが発生していない場合、保留状態になります。呼び出し側が待ち受けているイベントが起きて、それでアクティブな状態になっているのですが、 の説明を読むとevent_pending
、コードが吹き飛ばされているのを見て、イベントが保留されているときに、の内部状態を変更するのは悪いと書かれていますそれ、ここでの「保留中」という言葉は誤解だと思いますが、「event_active」のはずです....私は間違っていますか?
#include <event2/event.h>
#include <stdio.h>
/* Change the callback and callback_arg of 'ev', which must not be
* pending. */
int replace_callback(struct event *ev, event_callback_fn new_callback,
void *new_callback_arg)
{
struct event_base *base;
evutil_socket_t fd;
short events;
int pending;
pending = event_pending(ev, EV_READ|EV_WRITE|EV_SIGNAL|EV_TIMEOUT,
NULL);
if (pending) {
/* We want to catch this here so that we do not re-assign a
* pending event. That would be very very bad. */
fprintf(stderr,
"Error! replace_callback called on a pending event!\n");
return -1;
}
event_get_assignment(ev, &base, &fd, &events,
NULL /* ignore old callback */ ,
NULL /* ignore old callback argument */);
event_assign(ev, base, fd, events, new_callback, new_callback_arg);
return 0;
}