0

我像这样使用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,请帮助我...如何修改结构事件的注册事件?

4

1 回答 1

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);

在顶部,然后当你准备好写的时候

event_add(m_event, NULL);

当你写完

event_del(m_event);

无论如何,就像我说的那样,我不认为你正在做的事情应该是一个问题,但是如果当你添加一个仅EV_PERSIST作为事件类型的事件然后再删除/分配它时会发生一些时髦的行为,以上可以解决。(无论如何它会更少的代码/更有效的,所以也可以:))

于 2012-10-19T18:57:33.593 回答