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

EV_WRITEあなたのコードには、コア ダンプを発生させるようなものは見当たりませんが、フラグを追加するためだけに、なぜ event_assign を再度行っているのかを問い合わせるかもしれません。私が間違っている場合は修正してください。しかし、あなた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 に答える