初めて libevent を使用していますが、読み取りコールバックが呼び出されるまでアプリケーションを実行しないようにしようとして問題が発生しています。私もバッファイベントを使用しています。基本的に私がやっているのは、メインアプリケーションループでスリープを回避し、代わりに、ソケットから読み取るデータがある場合に OS にプロセスを (libevent を介して) ウェイクアップさせることです。誰でもこれを行う方法を知っていますか? libevent のアルファ ビルドで、ベース イベント ループを EVLOOP_NO_EXIT_ON_EMPTY に設定できることがわかりましたが、libevent コードを見ると、proc 全体を使い果たしてしまうと思います。私もこれについて読んだWindowsでソケットをブロッキングに設定するのは悪い考えだという質問があるため、解決策としてそれを行っていません。libuv と libev も同様であり、私のソリューションに貢献する可能性があるため、これをマークします。
1 に答える
0
次の API を使用する必要があります。一部の API は古くなっている可能性があります。Google で新しい API を検索できます。
struct event_base *base ;
struct event g_eve
base = event_init();
//after binding the socket register your socket for read event using below api
event_set(&g_eve, SockFd, EV_READ | EV_PERSIST, CallbackFunctin, &g_eve);
event_add(&g_eve, NULL);
event_base_dispatch(base);
于 2014-03-12T08:13:12.733 に答える