freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

libevent中文參考手冊(cè)-展示頁(yè)

2024-11-07 11:21本頁(yè)面
  

【正文】 event_base_get_method ()返回 event_base 正 在 使 用 的 方 法 。然而 libevent 運(yùn)行的時(shí)候,操作系統(tǒng)可能不能支持所有方法。這個(gè)數(shù)組的最后一個(gè)元素是 NULL。 3 檢查 event_base的后端方法 有時(shí)候需要檢查 event_base 支持哪些特征,或者當(dāng)前使用哪種方法。event_config_set_num_cpus_hint()函數(shù)是 版本新引入的。 示例 這些函數(shù)和類型在 event2/中聲明。這個(gè)函數(shù)告訴 event_config在生成多線程 event_base的時(shí)候,應(yīng)該試圖使用給定數(shù)目的 CPU。 如 果 創(chuàng) 建 了 libevent 不 能 滿 足 的 配 置 ,event_base_new_with_config()會(huì)返回 NULL。 注意 設(shè)置 event_config,請(qǐng)求 OS 不能提供的后端是很容易的。也可以通過設(shè)置 EVENT_EPOLL_USE_CHANGELIST 環(huán)境變量來打開epollchangelist 選項(xiàng)。但是如果傳遞任何使用 dup()或者其變體克隆 的 fd給 libevent, epollchangelist 后端會(huì)觸發(fā)一個(gè)內(nèi)核 bug,導(dǎo)致不正確的結(jié)果。 ? EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST:告訴 libevent,如果決定使用 epoll 后端,可以安全地使用更快的基于 changelist 的后端。 ? EVENT_BASE_FLAG_NO_CACHE_TIME:不是在事件循環(huán)每次準(zhǔn)備執(zhí)行超時(shí)回調(diào)時(shí)檢測(cè)當(dāng)前時(shí)間,而是在每次超時(shí)回調(diào)后進(jìn)行檢測(cè)。使用這個(gè)標(biāo)志需要三思:這會(huì)讓用戶更難調(diào)試你的程序與 libevent 的交互。設(shè)置這個(gè)選項(xiàng)可以為 event_base節(jié)省一點(diǎn)用于鎖定和解鎖的時(shí)間,但是讓在多個(gè)線程中訪問 event_base 成為不安全的。調(diào)用 event_config_set_flag()讓 libevent 在創(chuàng)建 event_base 時(shí)設(shè)置一個(gè)或者多個(gè)將在下面介紹的運(yùn)行時(shí)標(biāo)志。 接口 調(diào)用 event_config_avoid_method()可以通過名字讓 libevent 避免使用特定的可用后端。最后,調(diào)用event_base_new_with_config ( ) 獲 取 新 的 event_base 。 接口 要使用這些函數(shù)分配 event_base,先調(diào)用 event_config_new()分配一個(gè) event_config。event_config 是一個(gè)容納 event_base 配置信息的不透明結(jié)構(gòu)體。 event_base_new()函數(shù)聲明在 event2/中,首次出現(xiàn)在 libevent 版。選擇各種方法時(shí),函數(shù)會(huì)選擇 OS 支持 的最快方法。函數(shù)會(huì)檢測(cè)環(huán)境變量,返回一個(gè)到 event_base 的指針。如果要用編程的方法禁止后端,請(qǐng)看下面關(guān)于event_config_avoid_method()的說明??梢宰R(shí)別的方法有: ? select ? poll ? epoll ? kqueue ? devpoll ? evport ? win32 用戶可以用環(huán)境變量禁止某些特定的后端。如果需要用多個(gè)線程檢測(cè) IO,則需要為每個(gè)線程使用一個(gè)event_base。 如果設(shè)置 event_base 使用鎖,則可以安全地在多個(gè)線程中訪問它。) libevent 參考手冊(cè)第二章:創(chuàng)建 event_base 使用 libevent 函數(shù)之前需要分配一個(gè)或者多個(gè) event_base 結(jié)構(gòu)體。 (此外,不要向 libevent 維護(hù)者發(fā)送任何關(guān)于 或者更早版本的新特征,這些版本被認(rèn)為是穩(wěn)定的發(fā)布版本。 5 關(guān)于版本狀態(tài)的提示 及以前版本應(yīng)該被認(rèn)為是完全廢棄的。 ? 版之前不支持鎖定:只有確定不同時(shí)在多個(gè)線程中使用同一個(gè)結(jié) 構(gòu)體時(shí), libevent才是線程安全的。 在 以及以后版本的 libevent 中,老的頭文件仍然會(huì)作為新頭文件的封裝而存在。但是有時(shí)候可能需要使用較老的 API,例如在升級(jí)已存的應(yīng)用時(shí),或者支持因?yàn)槟承┰虿荒馨惭b 或者更新版本 libevent 的環(huán)境時(shí)。 (還存在不在 event2 目錄中的較老版本 libevent 的頭文件,請(qǐng)參考下節(jié):如果需要使用老版本 libevent) 4 如果需要使用老版本 libevent libevent 以更合理的、不易出錯(cuò)的方式修正了 API。直接依賴這類頭文件中的任何結(jié)構(gòu)體都會(huì)破壞程序?qū)ζ渌姹?libevent 的二進(jìn)制兼容性,有時(shí)候是以非常難以調(diào)試的方式出現(xiàn)。 ? 結(jié)構(gòu)頭文件:這類頭文件以相對(duì)不穩(wěn)定的布局定義各種結(jié)構(gòu)體。 ? 兼容頭文件:為已廢棄的函數(shù)提供兼容的頭部包含定義。 3 頭文件 libevent 公用頭文件都安裝在 event2 目錄中,分為三類: ? API 頭文件:定義 libevent 公用接口。 ? libevent_openssl:這個(gè)庫(kù)為使用 bufferevent 和 OpenSSL 進(jìn)行加密的通信提供支持。 某些平臺(tái)上可能安裝下列庫(kù): ? libevent_pthreads:添加基于 pthread 可移植線程庫(kù)的線程和鎖定實(shí)現(xiàn)。 ? libevent:這個(gè)庫(kù)因?yàn)闅v史原因而存在,它包含 libevent_core 和 libevent_extra 的內(nèi)容。 2 庫(kù) 創(chuàng)建 libevent 時(shí),默認(rèn)安裝下列庫(kù): ? libevent_core:所有核心的事件和緩沖功能,包含了所有的 event_base、 evbuffer、bufferevent 和工具函數(shù)。 ? evdns:一個(gè)簡(jiǎn)單的 DNS 客戶端 /服務(wù)器實(shí)現(xiàn)。) ? evbuffer:在 bufferevent 層之下實(shí)現(xiàn)了緩沖功能,并且提供了方便有效的訪問函數(shù)。除了通知程序套接字已經(jīng)準(zhǔn) 備好讀寫之外,還讓程序可以請(qǐng)求緩沖的讀寫操作,可以知道何時(shí) IO 已經(jīng)真正發(fā)生。 ? event 和 event_base: libevent 的核心,為各種平臺(tái)特定的、基于事件的非阻塞 IO 后端提供抽象 API,讓程序可以知道套接字何時(shí)已經(jīng)準(zhǔn)備好,可以讀或者寫,并且處理基本的超時(shí)功能,檢測(cè) OS 信號(hào)。 ? 方便:無論何時(shí),最自然的使用 libevent 編寫程序的方式應(yīng)該是穩(wěn)定的、可移植的。 ? 速度: libevent 嘗試使用每個(gè)平臺(tái)上最高速的非阻塞 IO 實(shí)現(xiàn),并且不引入太多的額外開銷。Libevent 參考手冊(cè):前言 1 從一萬英尺外看 Libevent Libevent 是用于編寫高速可移植非阻塞 IO 應(yīng)用的庫(kù),其設(shè)計(jì)目標(biāo)是: ? 可移植性:使用 libevent 編寫的程序應(yīng)該可以在 libevent 支持的所有平臺(tái)上工作。即使沒有好的方式進(jìn)行非阻塞 IO, libevent 也應(yīng)該支持一般的方式,讓程序可以在受限的環(huán)境中運(yùn)行。 ? 可擴(kuò)展性: libevent 被設(shè)計(jì)為程序即使需要上萬個(gè)活動(dòng)套接字的時(shí)候也可以良 好工作。 libevent 由下列組件構(gòu)成: ? evutil:用于抽象不同平臺(tái)網(wǎng)絡(luò)實(shí)現(xiàn)差異的通用功能。 ? bufferevent:為 libevent 基于事件的核心提供使用更方便的封裝。( bufferevent 接口有多個(gè)后端,可以采用系統(tǒng)能夠提供的更快的非阻塞 IO 方式,如 Windows 中的 IOCP。 ? ev:一個(gè)簡(jiǎn)單的 HTTP 客戶端 /服務(wù)器實(shí)現(xiàn)。 ? evrpc:一個(gè)簡(jiǎn)單的 RPC 實(shí)現(xiàn)。 ? libevent_extra:定義了程序可能需要,也可能不需要的協(xié)議特定功能,包括 HTTP、DNS 和 RPC。不應(yīng)該使用這個(gè)庫(kù),未來版本的 libevent 可能去掉這個(gè)庫(kù)。它獨(dú)立于libevent_core,這樣程序使用 libevent 時(shí)就不需要鏈接到 pthread,除非是以多線程方式使用 libevent。它獨(dú)立于 libevent_core,這樣程序使用 libevent 時(shí)就不需要鏈接到 OpenSSL,除非是進(jìn)行加密通信。這類頭文件沒有特定后綴。不應(yīng)該使用這類頭文件,除非是在移植使用較老版本 libevent 的程序時(shí)。這些結(jié)構(gòu)體中的一些是為了提供快速訪問而暴露;一些是因?yàn)闅v史原因而暴露。這類頭文件具有后綴“ ”。如果可能,編寫新程序時(shí)應(yīng)該使用 libevent 。 較老版本的 libevent 頭文件較少,也不安裝在 event2 目錄中。 其他關(guān)于使用較老版本的提示: ? 版之前只有一個(gè)庫(kù) libevent,它包含現(xiàn)在分散到 libevent_core 和 libevent_extra 中的所有功能。 下面的節(jié)還將討論特定代碼區(qū)域可能遇到的已經(jīng)廢棄的 API。 之前的版本應(yīng)該被認(rèn)為是充滿 bug 的。如果在 或者更早版本中發(fā)現(xiàn) bug,在報(bào)告之前請(qǐng)確定在最新的穩(wěn)定發(fā)布版本中問題仍然存在:后續(xù)發(fā)布可能已經(jīng)解決了問題。每個(gè) event_base結(jié)構(gòu)體持有一個(gè)事件集合,可以檢測(cè)以確定哪個(gè)事件是激活的。然而,其事件循環(huán)只能運(yùn)行在一個(gè)線程中。 每個(gè) event_base 都有一種用于檢測(cè)哪種事件已經(jīng)就緒的“方法”,或者說后端。比如說,要禁止 kqueue 后端,可以設(shè)置EVENT_NOKQUEUE 環(huán)境變量。 1 建立默認(rèn)的 event_base event_base_new()函數(shù)分配并且返回一個(gè)新的具有默認(rèn)設(shè)置的 event_base。如果發(fā)生錯(cuò)誤,則返回 NULL。 接口 大多數(shù)程序使用這個(gè)函數(shù)就夠了。 2 創(chuàng)建復(fù)雜的 event_base 要對(duì)取得什么類型的 event_base 有更多的控制,就需要使用 event_config。需要 event_base 時(shí),將event_config 傳遞給 event_base_new_with_config()。然后,對(duì) event_config 調(diào)用其它函數(shù),設(shè)置所需要的 event_base 特征。 完 成 工 作 后 , 使 用event_config_free()釋放 event_config。調(diào)用 event_config_require_feature()讓 libevent 不使用不能提供所有指定特征的后端。 event_config_require_features()可識(shí)別的特征值有 : ? EV_FEATURE_ET:要求支持邊沿觸發(fā)的后端 ? EV_FEATURE_O1:要求添加、刪除單個(gè)事件,或者確定哪個(gè)事件激活的操作是 O( 1)復(fù)雜度的后端 ? EV_FEATURE_FDS:要求支持任意文件描述符,而不僅僅是套接字的后端 event_config_set_flag()可識(shí)別的選項(xiàng)值有 : ? EVENT_BASE_FLAG_NOLOCK:不要為 event_base 分配鎖。 ? EVENT_BASE_FLAG_IGNORE_ENV:選擇使用的后端時(shí),不要檢測(cè) EVENT_*環(huán)境變量。 ? EVENT_BASE_FLAG_STARTUP_IOCP:僅用于 Windows,讓 libevent 在啟動(dòng)時(shí)就啟用任何必需的 IOCP 分發(fā)邏輯,而不是按需啟用。注意:這會(huì)消耗更多的 CPU 時(shí)間。 epollchangelist 后端可以在后端的分發(fā)函數(shù)調(diào)用之間,同樣的 fd 多次修改其狀態(tài)的情況下,避免不必要的系統(tǒng)調(diào)用。在不使用 epoll 后端的情況下,這個(gè)標(biāo)志是沒有效果的。 上述操作 event_config 的函數(shù)都在成功時(shí)返回 0,失敗時(shí)返回 1。比如說,對(duì)于 libevent ,在 Windows中是沒有 O( 1)后端的 ;在 Linux中也沒有同時(shí)提供 EV_FEATURE_FDS和 EV_FEATURE_O1 特 征 的 后 端 。 接口 這個(gè)函 數(shù)當(dāng)前僅在 Windows 上使用 IOCP 時(shí)有用,雖然將來可能在其他平臺(tái)上有用。注意這僅僅是一個(gè)提示: event_base 使用的 CPU 可能比你選擇的要少。 EVENT_BASE_FLAG_IGNORE_ENV 標(biāo) 志 首 次 出 現(xiàn) 在 版本。本節(jié)的其他內(nèi)容首次出現(xiàn)在 版本。 接口 event_get_supported_methods()函數(shù)返回一個(gè)指針,指向 libevent 支持的方法名字?jǐn)?shù)組。 示例 注意 這個(gè)函數(shù)返回 libevent 被編譯以支持的方法列表。比如說,可能 OS X 版本中的 kqueue 的 bug 太多,無法使用。event_base_get_features()返回 event_base 支持的特征的比特掩碼。 event_base_get_method()首次出現(xiàn)在 版本中,其他函數(shù)首次出現(xiàn)在 版本中。 接口 注意:這個(gè)函數(shù)不會(huì)釋放當(dāng)前與 event_base 關(guān)聯(lián)的任何事件,或者關(guān)閉他們的套接字,或者釋放任何指針。 5 設(shè)置 event_base的優(yōu)先級(jí) libevent 支持為事件設(shè)置多個(gè)優(yōu)先級(jí)。可以調(diào)用 event_base_priority_init()設(shè)置 event_base 的優(yōu)先級(jí)數(shù)目。 base 是要修改的 event_base, n_priorities是要支持的優(yōu)先級(jí)數(shù)目,這個(gè)數(shù)目至少是 1。 常量 EVENT_MAX_PRIORITIES 表示 n_priorities 的上限。
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1