今天開始學習Libevent 。css
Libevent 是開源社區的一款高性能I/O框架庫。安全
主要特色有:
1 跨平臺。
2 統一事件源
3 線程安全
4 基於Reactorruby
今天主要進行了Libevent的安裝,以及利用libevent框架編寫一個間隔1s打印 Hello Libevent!markdown
信息的程序。框架
首先是安裝:
1 下載libevent源代碼,下載地址http://libevent.org/。我下載的版本號是2.0 stable版本號。下載的文件格式是tar.gz包函數
2 進入剛下載獲得的tar.gz包的父母錄,運行 tar -zxvf **.tar.gz。 解壓獲得一個文件夾,進入這個文件夾。oop
3 依次運行下列命令,就能夠完畢安裝post
$ ./configure
$ make
$ make verify # (optional)
$ sudo make install
測試代碼的流程是
建立Reactor實例(event_base) -》建立定時器的事件處理器-》將事件處理器增長註冊事件列表-》分發事件 -》釋放系統資源。性能
代碼例如如下:學習
#include <sys/signal.h>
#include <event.h>
struct event_base* base = NULL;
struct event* signal_event = NULL;
struct event* timeout_event = NULL;
timeval tv = {0,0};
void signal_cb (int fd, short event, void* argc)//信號回調函數
{
struct event_base* base = (event_base*) argc;//獲取傳遞進來的Reactor對象
struct timeval delay = { 2,0};//設置延時結構體。延時時間2s
printf("Caught an interrupt signal; exciting cleanly in two seconds...\n");
event_base_loopexit (base,&delay);
}
void timeout_cb (int fd,short event, void* argc)
{
printf("Hello Libevent!\n");
event_add(timeout_event,&tv);
}
int main()
{
event_base* base = event_init();//生成Reactor實例
signal_event = evsignal_new(base,SIGINT,signal_cb,base);//生成SIGINT信號的事件處理器
event_add(signal_event,NULL);//將事件處理器增長到註冊事件隊列
tv.tv_sec = 1;
tv.tv_usec = 0;
timeout_event = evtimer_new(base,timeout_cb,NULL);//生成定時器處理器
event_add(timeout_event,&tv);//將定時器處理器增長註冊事件隊列
event_base_dispatch(base);//分發事件
event_free(timeout_event);
event_free(signal_event);
event_base_free(base);
}
~
程序運行結果截圖