libev入門

3864 ワード

libevは何ですか?libevを知るには、まずlibeventを知る必要があります.2000年には最初のバージョンがリリースされました.libeventのプログラミングインターフェースによって、指定されたイベントが発生した後にコールバック関数を呼び出すことができます.指定されたイベントはファイルディスクリプタ上の読み書きイベントなどです.ファイル記述子のイベント以外にも、libeventはタイマーや信号などをサポートしています.libeventを詳しく知りたいなら、そのサイトを参照してもいいです.http://monkey.org/~provos/libevent/です.以下はlibevサイトでの自述である.
A full-feature d and high-performance event loop that is loosely modelled after libevent,but without its limitations and bugs.It is used,among others,in the GNU Virtual Private Ethernet and
libev Libevを理解することは、event loopである.Socket読み取り可能イベントなど、libevは登録されたイベントのソースを管理し、イベント発生時に対応するプログラムをトリガする.To do this、it must take more or less compleete control over your process(or thread)by executing the イベントloop handler,and will then communicate events via calback mechansm.event watchを通じてイベントを登録します.which are relatively small c structures you initiase with the details of the event,and then hand hand it it to libetch.watch.異なるイベントタイプのウォッチはまた異なるデータタイプに対応し、ウォッチの定義モードはstruct ev_TYPE ev_TYPE, TYPE である.現在のlibevは以下のタイプのウォッチを定義しています.
ev_オev_timer ev_periodic ev_signal ev_child ev_stat ev_id le ev_prepare and ev_check ev_embed ev_fork ev_cleanup ev_async 以下はlibevが使用する例であり、stdIN読み取り可能イベントの発生を、ioタイプのウォッチを登録することによって監視する.
   static void my_cb(struct evuloop*loop、ev*w、int revensts)   {     evyi ustop(w);     evubreak(loop、EVBREAKUALL);   }    struct evuloop*loop=evudfault(0)   evuuio stdinuwatch;   evuuinit(&stdinuwatch、myucb)   evyiouset(&stdinuwatch、stdINuFILENO、EV uREAD)   evyioustart;   evcuurun(loop,0)
上記の例のコードで使用されているwatchに関する関数は、evuuinit、evuuiouset、evuuiko tart、evuuiko ustopがあります.evuinitは、特定のタイプとは関係のない部分を初期化します.evyishetは、iutタイプに対応する部分を初期化します.evuuinitとevuTYPEを代替します.evuuiko ustartは対応するウォッチをアクティブにします.ウォッチはアクティブになった時だけイベントを受信できます.evubreakはアクティブになったウォッチを停止します.次にevent loopの概念を見てみます.プログラムの例としてはevubreakとevubreakの両方があります.は、それぞれdefaultタイプとdynamically createdタイプで、前者はサブプロセスイベントをサポートしています.evudefault_uloopとevufo関数はそれぞれdefaultタイプまたはdynamicalle createdタイプのevent loopを作成するために使用されます.システムアプリケーションに対してイベントの処理が開始された場合は、イベントの呼び出しが発生します.もうactiveのウォッチがないと、このプロセスは繰り返されます.libevプログラミングはまずlibevの例を見にきます.このコードはキーボードイベントの発生を待っています.あるいはタイムアウトして、二つのイベントはいずれもプログラムが終了します.オペレーティングシステムの環境はuuntu server 10.10で、libevはダウンロードのソースコードです.uuntu server自身のバージョンを採用していません.ソースの住所はありません.はい、http://dist.schmorp.de/libev/libev-4.04.tar.gz例コードは以下の通りです.
//includeの頭一つのファイルだけでいいです.胫include//for put/evry watch type has typedef'd struct/ with the name evvTYPE ev stdinuwater;evmutimer timeoutwater;//all watch calbacks have a simillar signature//this calback is caled when data is readable on stdin stativent        puts(「stdin ready」);        //for one-shot events、one must manaualy stop the watch        //with its cores ponding stop function.        evyioustop(EV A_w)        //this causes all ness ted evurun's to stop iterating        evubreak(EV A EVBREAKUALL)//another calback,this time for a time-out static void timeout ucb(EV uP_evtime*w,int revensts)        puts(「timeout」)        //this causes the innersmost evurun to stop iterating        evubreak(EV A EVBREAKUONE);int main(void){        //use the default event loop unless you have special needs        struct evuloop*loop=EV_DEFAULT;        //initialise an io watch,then start it        //this one will watch for stdin to become readable        evuuiouinit(&stdinuwatch、stdinuucb、0、EV_READ)        evyioustart;        //initialise a timer Watch,then start it        //シンプルnon-repeat 5.5 second timeout        evmbergionit(&timeoutwatch、timeoutucb、5.5、0.)        evmter ustart;        //now wait for events to arrive        evcuurun(loop,0)        //break was caled、so exit        return 0;
次のコマンドでコンパイルします.
g++-lev-o sample sample.c