2012-10-19 1 views
0

J'utilise libevent comme ça,Comment modifier l'événement inscrit dans 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); 

Mais je ne sais pas comment modifier le cas de m_event, il semble y avoir aucune interface pour fonctionner dans le manuel officiel, j'ai essayé de le faire comme ça, mais ça fait un core dump.

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

ocurs de coredump à event_assign, s'il vous plaît aidez-moi ... comment modifier l'événement registed de l'événement struct?

+0

Et je ne veux pas utiliser bufferevent, parce que j'ai ma propre machine statusmachine. Y at-il une bonne méthode pour résoudre ce problème, sauf libérer l'ancien et event_new le plus récent? Merci –

Répondre

0

Je ne vois rien dans votre code qui devrait vous permettre d'effectuer un vidage de base, mais je pourrais vous demander de nouveau pourquoi vous avez event_assigning juste pour ajouter dans le drapeau EV_WRITE. Corrigez-moi si je me trompe, mais depuis votre event_new est seulement EV_PERSIST spécifiant, je ne pense pas que ça va jamais le feu (alors pourquoi event_add il à ce moment-là?) Il semble que vous devriez juste être faites

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

en haut, puis lorsque vous êtes prêt à écrire juste faire

event_add(m_event, NULL); 

et quand vous avez terminé l'écriture

event_del(m_event); 

quoi qu'il en soit, comme je l'ai dit que je ne penserais pas ce que vous êtes Ce devrait être un problème per-say, mais s'il y a un comportement génial qui se produit lorsque vous ajoutez un événement avec seulement EV_PERSIST comme type d'événement et ensuite del/assign, cela peut le résoudre. (Et ce sera moins de code/plus effecient de toute façon, donc pourrait aussi bien :))