如何修改Libevent中注册的活动?

时间:2012-10-19 15:53:20

标签: c events epoll libevent

我像这样使用libevent,

client->m_event = event_new(listener->m_server->m_server_base, client->m_sockfd, EV_PERSIST, Client::ClientEventCallback, client);
event_add(client->m_event, NULL);

但我不知道如何修改m_event的事件,似乎没有在官方手册中操作的界面,我试图这样做,但它做了一个核心转储。

short event = event_get_events(m_event);
event_del(m_event);
event_assign(m_event, m_server->m_server_base, m_sockfd, event | EV_WRITE, Client::ClientEventCallback, this);
event_add(m_event, NULL); 
在event_assign上核心转储,请帮助我......如何修改struct事件的注册事件?

1 个答案:

答案 0 :(得分:0)

我没有在你的代码中看到任何应该让你进行核心转储的内容,但我可能会询问为什么你再次使用event_assign,只是为了添加EV_WRITE标志。如果我错了,请纠正我,但由于你的event_new只是指定EV_PERSIST,我认为它不会被激活(那么为什么event_add就在那时呢?)看起来你应该这么做只是做着

client->m_event = event_new(listener->m_server->m_server_base, client->m_sockfd, EV_PERSIST | EV_WRITE, Client::ClientEventCallback, client);

up up,然后当你准备好写作时

event_add(m_event, NULL);

当你写完

event_del(m_event);

无论如何,就像我说的那样我不会认为你在做什么应该是一个问题,但如果你添加一个只有EV_PERSIST事件的事件会发生一些时髦的行为键入然后del /赋值,上面可以解决它。 (而且它会更少的代码/更有效,所以不妨:))