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

正文內(nèi)容

libevent中文參考手冊-wenkub

2022-11-06 11:21:27 本頁面
 

【正文】 用不能提供所有指定特征的后端。然后,對 event_config 調(diào)用其它函數(shù),設(shè)置所需要的 event_base 特征。 2 創(chuàng)建復雜的 event_base 要對取得什么類型的 event_base 有更多的控制,就需要使用 event_config。如果發(fā)生錯誤,則返回 NULL。比如說,要禁止 kqueue 后端,可以設(shè)置EVENT_NOKQUEUE 環(huán)境變量。然而,其事件循環(huán)只能運行在一個線程中。如果在 或者更早版本中發(fā)現(xiàn) bug,在報告之前請確定在最新的穩(wěn)定發(fā)布版本中問題仍然存在:后續(xù)發(fā)布可能已經(jīng)解決了問題。 下面的節(jié)還將討論特定代碼區(qū)域可能遇到的已經(jīng)廢棄的 API。 較老版本的 libevent 頭文件較少,也不安裝在 event2 目錄中。這類頭文件具有后綴“ ”。不應該使用這類頭文件,除非是在移植使用較老版本 libevent 的程序時。它獨立于 libevent_core,這樣程序使用 libevent 時就不需要鏈接到 OpenSSL,除非是進行加密通信。不應該使用這個庫,未來版本的 libevent 可能去掉這個庫。 ? evrpc:一個簡單的 RPC 實現(xiàn)。( bufferevent 接口有多個后端,可以采用系統(tǒng)能夠提供的更快的非阻塞 IO 方式,如 Windows 中的 IOCP。 libevent 由下列組件構(gòu)成: ? evutil:用于抽象不同平臺網(wǎng)絡實現(xiàn)差異的通用功能。即使沒有好的方式進行非阻塞 IO, libevent 也應該支持一般的方式,讓程序可以在受限的環(huán)境中運行。 ? 速度: libevent 嘗試使用每個平臺上最高速的非阻塞 IO 實現(xiàn),并且不引入太多的額外開銷。 ? event 和 event_base: libevent 的核心,為各種平臺特定的、基于事件的非阻塞 IO 后端提供抽象 API,讓程序可以知道套接字何時已經(jīng)準備好,可以讀或者寫,并且處理基本的超時功能,檢測 OS 信號。) ? evbuffer:在 bufferevent 層之下實現(xiàn)了緩沖功能,并且提供了方便有效的訪問函數(shù)。 2 庫 創(chuàng)建 libevent 時,默認安裝下列庫: ? libevent_core:所有核心的事件和緩沖功能,包含了所有的 event_base、 evbuffer、bufferevent 和工具函數(shù)。 某些平臺上可能安裝下列庫: ? libevent_pthreads:添加基于 pthread 可移植線程庫的線程和鎖定實現(xiàn)。 3 頭文件 libevent 公用頭文件都安裝在 event2 目錄中,分為三類: ? API 頭文件:定義 libevent 公用接口。 ? 結(jié)構(gòu)頭文件:這類頭文件以相對不穩(wěn)定的布局定義各種結(jié)構(gòu)體。 (還存在不在 event2 目錄中的較老版本 libevent 的頭文件,請參考下節(jié):如果需要使用老版本 libevent) 4 如果需要使用老版本 libevent libevent 以更合理的、不易出錯的方式修正了 API。 在 以及以后版本的 libevent 中,老的頭文件仍然會作為新頭文件的封裝而存在。 5 關(guān)于版本狀態(tài)的提示 及以前版本應該被認為是完全廢棄的。) libevent 參考手冊第二章:創(chuàng)建 event_base 使用 libevent 函數(shù)之前需要分配一個或者多個 event_base 結(jié)構(gòu)體。如果需要用多個線程檢測 IO,則需要為每個線程使用一個event_base。如果要用編程的方法禁止后端,請看下面關(guān)于event_config_avoid_method()的說明。選擇各種方法時,函數(shù)會選擇 OS 支持 的最快方法。event_config 是一個容納 event_base 配置信息的不透明結(jié)構(gòu)體。最后,調(diào)用event_base_new_with_config ( ) 獲 取 新 的 event_base 。調(diào)用 event_config_set_flag()讓 libevent 在創(chuàng)建 event_base 時設(shè)置一個或者多個將在下面介紹的運行時標志。使用這個標志需要三思:這會讓用戶更難調(diào)試你的程序與 libevent 的交互。 ? EVENT_BASE_FLAG_EPOLL_USE_CHANGELIST:告訴 libevent,如果決定使用 epoll 后端,可以安全地使用更快的基于 changelist 的后端。也可以通過設(shè)置 EVENT_EPOLL_USE_CHANGELIST 環(huán)境變量來打開epollchangelist 選項。 如 果 創(chuàng) 建 了 libevent 不 能 滿 足 的 配 置 ,event_base_new_with_config()會返回 NULL。 示例 這些函數(shù)和類型在 event2/中聲明。 3 檢查 event_base的后端方法 有時候需要檢查 event_base 支持哪些特征,或者當前使用哪種方法。然而 libevent 運行的時候,操作系統(tǒng)可能不能支持所有方法。 示例 這個函數(shù)定義在 event2/中。 event_base_free()定義在 event2/中,首次由 libevent 實現(xiàn)。 接口 成功時這個函數(shù)返回 0,失敗時返回 1。調(diào)用這個函數(shù)時為n_priorities 給出更大的值是錯誤的。event_base_priority_init() 函數(shù)定義在 event2/中,從 libevent 版就可用了。 示例 event_reinit()定義在 event2/中,在 libevent 版中首次可用。因為 event_base 不是線程安全的,這很容易導致錯誤。 Libevent 參考手冊第三章:與事件循環(huán)一起工作 1 運行循環(huán) 一旦有了一個已經(jīng)注冊了某些事件的 event_base(關(guān)于如何創(chuàng)建和注冊事件請看下一節(jié)),就需要讓 libevent 等待事件并且通知事件的發(fā)生。 在 flags 參數(shù)中設(shè)置一個或者多個標志就可以改變 event_base_loop()的行為。 為幫助理解,這里給出 event_base_loop()的算法概要: 偽代碼 為方便起見,也可以調(diào)用 接口 event_base_dispatch()等同于沒有設(shè)置標志的 event_base_loop()。 接口 event_base_loopexit()讓 event_base在給定時間之后停止循環(huán)。它與 event_base_loopexit( base,NULL)的不同在于,如果 event_base 當前正在執(zhí)行激活事件的回調(diào),它將在執(zhí)行完當前正在處理的事件后立即退出??梢哉{(diào)用下述函數(shù)來確定是否調(diào)用了 loopexit 或者 break 函數(shù)。 event_break_loopexit()函數(shù)首次在 libevent 版本中實現(xiàn); event_break_loopbreak()首次在 libevent 版本中實現(xiàn)。否則,函數(shù)調(diào)用 evutil_gettimeofday()獲取真正的當前時間。 這個函數(shù)是 libevent 新引入的。 這個函數(shù)在 libevent 版本中引入。 注意 版本之前的 event_base 是不支持鎖的,所以這些函數(shù)并不是完全線程安全的:不允許在執(zhí)行事件循環(huán)的線程之外的其他線程中調(diào)用 _loopbreak()或者 _loopexit()函數(shù)。此時可以將事件添加到 event_base中,這使之進入“ 未決( pending) ”狀態(tài)。刪除操作可以讓未決事件成為非未決(已初始化)的;添加操作可以讓非未決事件再次成為未決的。如果 fd 非負,則它是將被觀察其讀寫事件的文件。 要釋放事件,調(diào)用 event_free()。 事件標志 ?? EV_TIMEOUT 這個標志表示某超時時間流逝后事件成為激活的。 ?? EV_WRITE 表示指定的文件描述符已經(jīng)就緒,可以寫入的時候,事件將成為激活的。這個標志影響 EV_READ 和 EV_WRITE 的語義。 這些標志定義在 event2/中。 然而,如果設(shè)置了 EV_PERSIST 標志,事件就是持久的。因此,如果具有EV_READ|EV_PERSIST 標志,以及 5 秒的超時值,則事件將在以下情況下成為激活的: ?? 套接字已經(jīng)準備好被讀取的時候 ?? 從最后一次成為激活的開始,已經(jīng)逝去 5 秒 只有超時的 事件 為使用方便, libevent 提供了一些以 evtimer_開頭的宏,用于替代 event_*調(diào)用來操作純超時事件。要構(gòu)造信號處理器,使用: 接口 除了提供一個信號編號代替文件描述符之外,各個參數(shù)與 event_new()相同。先前版本中這些宏叫做 signal_add()、signal_del()等等。 設(shè)置不使用堆分配的事件 出于性能考慮或者其他原因,有時需要將事件作為一個大結(jié)構(gòu)體的一部分。 不在堆上分配 event 具有破壞與其他版本 libevent 二進制兼容性的風險:其他版本中的 event 結(jié)構(gòu)體大小可能不同。 警告 不要對已經(jīng)在 event_base 中未決的事件調(diào)用 event_assign(),這可能會導致難以診斷的錯誤。再次強調(diào),只有在確信堆分配是一個嚴重的性能問題時才應該使用這個函數(shù),因為這個函數(shù)讓代碼難以閱讀和編寫。從 版 本 開 始 , 函 數(shù) 返 回 int , 在 這 之 前 函 數(shù) 返 回 void 。使用event_add()將事件添加到 event_base。否則, tv 以秒和微秒指定超時值。”,超時事件將會等待 40 年,而不是 10 秒。 注意 :如果在事件激活后,其回調(diào)被執(zhí)行前刪除事件,回調(diào)將不會執(zhí)行。 在前一章討論過,每個 event_base 有與之相關(guān)的一個或者多個優(yōu)先級。 多個不同優(yōu)先級的事件同時成為激活的時候,低優(yōu)先級的事件不會運行。 這個函數(shù)聲明在 event2/中,從 版本就存在了。如果提供了 tv_out 參數(shù),并且 what 參數(shù)中設(shè)置了EV_TIMEOUT 標志,而事件當前正因超時事件而未決或者激活,則 tv_out 會返回事件的超時值。 event_get_callback()和 event_get_callback_arg()返回事件的回調(diào)函數(shù)及其參數(shù)指針。 event_pending()函數(shù)從 版就存在了。 5 配置一次觸發(fā)事件 如果不需要多次添加一個事件,或者要在添加后立即刪除事件,而事件又不需要是持久的,則可以使用 event_base_once()。成功時函數(shù)返回 0,失敗時返回 1。事件不需要已經(jīng)處于未決狀態(tài),激活事件也不會讓它成為未決的。 比如說,假定有 10000 個事件,每個都需要在添加后 5 秒觸發(fā)超時事件。 libevent 通過放置一些超時值到隊列中,另一些到二進制堆中來解決這個問題。函數(shù)返回一個 到特別的timeval結(jié)構(gòu)體的指針,可以使用這個指針指示事件應該被添加到 O( 1)隊列,而不是 O( logN)堆。 這個函數(shù)由 版本引入。 除非編寫一個非常特別的應用,通常不需要使用這個函數(shù)。替代的是將事件關(guān)聯(lián)到“當前” event_base 的 event_set()。 event_set()具有一些用于更方便地處理定時器和信號的變 體: evtimer_set()大致對應 evtimer_assign(); evsignal_set()大致對應 evsignal_assign()。 較老版本( 版之前)的 libevent 用宏 EVENT_FD()和 EVENT_SIGNAL()代表現(xiàn)在的event_get_fd()和 event_get_signal()函數(shù)。這些函數(shù)包括 event_add()、 event_del()、 event_active()和 event_base_once()。 fd和 READ/WRITE標志的事件。然而,使用 Windows 套接字 API 時, socket 具有類型 SOCKET,它實際上是個 類似指針的句柄,收到這個句柄的次序是未定義的。考慮到這種情況, libevent 定義了來自于 的、位寬度確定( bitwidthspecific)的整數(shù)類型: 跟 C99 標準一樣,這 些類型都有明確的位寬度。 ev_ssize_t 類型的最大可能值是 EV_SSIZE_MAX;最小可能值是 EV_SSIZE_MIN。在有這個類型定義的平臺中, ev_socklen_t 定義為 socklen_t,在沒有的平臺上則定義為合理的默認類型。 ev_intptr_t 與 ev_uintptr_t 類型,以及 EV_SSIZE_MAX/MIN 宏定義由 版本加入。 接口 清除 timeval 會將其值設(shè)置為 0。注意:與某些操作系統(tǒng)版本不同的是, libevent 的時間比較支持所有 C 關(guān)系運算符(也就是 、 、 ==、 !=、 =和 =)。 3 套接字 API兼容性 本節(jié)由于歷史原因而存在: Windows 從來沒有以良好兼容的方式實現(xiàn) Berkeley 套接字API。在此之前 ,需要使用EVUTIL_CLOSESOCKET 宏。 ( 因 為 對于 來 自套 接 字函 數(shù) 的錯 誤 , Windows 不使用 errno , 而是 使 用WSAGetLastError
點擊復制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1