日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php框架 > 框架設(shè)計 > [libevent源碼分析] event_set

[libevent源碼分析] event_set

來源:程序員人生   發(fā)布時間:2015-03-20 09:22:32 閱讀次數(shù):3280次

libevent使用event來封裝網(wǎng)絡(luò)事件回調(diào),參數(shù)、fd。。。等1些信息,函數(shù)很簡單

void event_set(struct event *ev, int fd, short events, void (*callback)(int, short, void *), void *arg) { /* Take the current base - caller needs to set the real base later */ ev->ev_base = current_base; //設(shè)置成默許的current_base,如果 ev->ev_callback = callback; //設(shè)置事件回調(diào)callback; ev->ev_arg = arg; //設(shè)置參數(shù) ev->ev_fd = fd; //設(shè)置句柄 ev->ev_events = events; //設(shè)置當(dāng)前的事件 /* * EV_TIMEOUT 0x01 * EV_READ 0x02 * EV_WRITE 0x04 * EV_SIGNAL 0x08 * EV_PERSIST 0x10 */ ev->ev_res = 0; //記錄當(dāng)前激活事件的類型 ev->ev_flags = EVLIST_INIT; //設(shè)置事件標(biāo)志,用于表示當(dāng)前的事件處于甚么階段 /* * EVLIST_TIMEOUT 0x01 //代表event在time堆中 * EVLIST_INSERTED 0x02 //代表event在已注冊時間鏈表中 * EVLIST_SIGNAL 0x04 //未見使用 * EVLIST_ACTIVE 0x08 //代表event在激活鏈表中 * EVLIST_INTERNAL 0x10 //內(nèi)部使用標(biāo)記 * EVLIST_INIT 0x80 //代表event已被初始化 */ ev->ev_ncalls = 0; //代表callback被履行多少次 ev->ev_pncalls = NULL; //指向ev_ncallsor指向NULL min_heap_elem_init(ev); //初始化時間堆中的索引值 /* by default, we put new events into the middle priority */ if(current_base) ev->ev_pri = current_base->nactivequeues/2;//設(shè)置事件的權(quán)限為中間權(quán)限為默許值 }

使用libevent在多線程中,就會存在多個event_base來進(jìn)行reactor事件模型, 就需要對struct event設(shè)置所歸屬的event_base
調(diào)用的函數(shù)以下:

int event_base_set(struct event_base *base, struct event *ev) { /* Only innocent events may be assigned to a different base */ if (ev->ev_flags != EVLIST_INIT)//僅僅處在初始化中的事件對象才可以設(shè)置base,用于更新ev_base return (⑴); ev->ev_base = base; ev->ev_pri = base->nactivequeues/2; return (0); }

這樣當(dāng)每一個線程都存在1個event_base的時候,那末就能夠根據(jù)event所屬的線程來設(shè)置當(dāng)前的event_base,
如果不設(shè)置event_base而使用默許,那末會使用current_base,current_base設(shè)置成最后1個創(chuàng)建的event_base對象


設(shè)置事件權(quán)限,這個函數(shù)1般都是剛創(chuàng)建完event_base的使用,由于它使用的是current_base

int event_priority_init(int npriorities) { return event_base_priority_init(current_base, npriorities); }

//重新設(shè)置event_base權(quán)限,1維是最高的。。。

int event_base_priority_init(struct event_base *base, int npriorities) { int i; if (base->event_count_active) return (⑴); if (base->nactivequeues && npriorities != base->nactivequeues) { for (i = 0; i < base->nactivequeues; ++i) { free(base->activequeues[i]); } free(base->activequeues); } /* Allocate our priority queues */ base->nactivequeues = npriorities; base->activequeues = (struct event_list **)calloc(base->nactivequeues, npriorities * sizeof(struct event_list *)); if (base->activequeues == NULL) event_err(1, "%s: calloc", __func__); for (i = 0; i < base->nactivequeues; ++i) { base->activequeues[i] = malloc(sizeof(struct event_list)); if (base->activequeues[i] == NULL) event_err(1, "%s: malloc", __func__); TAILQ_INIT(base->activequeues[i]); } return (0); }

libeven 全部源碼分析和sample都在我的 githup

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 久久久国产精品入口麻豆 | 亚洲视频在线观看免费 | 999精品视频一区二区三区 | 狠狠一区| www.国产精品 | 人人操日日干 | 久久精品| 国产精品视频免费在线观看 | 免费在线播放av | 可以在线观看av的网站 | 十八女人毛片免费视频 | 成人在线欧美 | av在线大全 | 国产精品电影网 | 国产精品久久久久久久久久三级 | 久久女| 在线视频久久 | 自拍偷拍欧美日韩 | 日韩精品电影在线观看 | 久久久99国产精品免费 | 免费观看污污视频 | 免费一看一级毛片 | 日韩欧美一区二区在线 | 国产传媒一区二区三区 | 成人激情视频在线 | 欧美一区二区人人喊爽 | 伊人欧美| 狠狠爱成人 | 99精品视频免费观看 | 久久99精品久久久久久久久久久久 | 操网 | 综合久久伊人 | 久久久午夜视频 | 男女在线视频 | 999久久久久久久久6666 | 性视频网址 | 久久久久国产精品免费免费搜索 | 欧美成人午夜电影 | 欧产日产国产精品一二 | 免费一看一级毛片 | 热99精品|