這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)基于c++11的event-drivenlibrary的理解是怎樣的,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、富源ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的富源網(wǎng)站制作公司
做了一個(gè)不到200行的事件驅(qū)動(dòng)庫,基于c++11標(biāo)準(zhǔn),header-only,跨平臺(tái)。支持自定義事件,通過wake_up函數(shù)異步喚醒。寫這個(gè)庫的動(dòng)機(jī)是想為之前自己寫的日志庫提供日志回滾機(jī)制。
github:https://github.com/chloro-pn/event_pool
event_pool
基本介紹
a header-only event-driven library based on c++11.
一個(gè)基于c++11標(biāo)準(zhǔn),僅需要頭文件的事件驅(qū)動(dòng)庫:)。
使用方法:
創(chuàng)建event_pool對(duì)象并申請(qǐng)一個(gè)線程做事件處理,在該線程中調(diào)用run函數(shù)。
//run the event_pool. std::shared_ptr<event_pool> ev(new event_pool()); std::thread th([=]()->void { ev->run(); });
創(chuàng)建event_handle和time_handle對(duì)象并設(shè)置id_,type_,回調(diào)函數(shù)func_,上下文args_(如果是time_handle則還要設(shè)置觸發(fā)時(shí)間)等,push進(jìn)event_pool對(duì)象。
//create time_handle. std::shared_ptr<time_handle> h(new time_handle()); h->id_ = "timer test "; h->type_ = time_handle::type::duration; h->duration_ = seconds(2); h->args_ = nullptr; h->func_ = [](std::shared_ptr<time_handle> self)->void { std::cout << self->id_ << " wake up !" << std::endl; }; //create event_handle. std::shared_ptr<event_handle> eh(new event_handle()); eh->id_ = "back cout "; eh->type_ = event_handle::type::every; eh->args_ = nullptr; eh->func_ = [](std::shared_ptr<event_handle> self)->void { std::cout << self->id_ << " wake up !"<<std::endl; }; //push them into ev. ev->push_timer(h); ev->push_event(eh);
在需要觸發(fā)事件的時(shí)候調(diào)用wake_up函數(shù)(time_handle沒有wake_up函數(shù),等待時(shí)間到達(dá)自動(dòng)觸發(fā))。當(dāng)需要關(guān)閉event_pool時(shí),調(diào)用stop函數(shù),然后回收線程,沒有來得及處理的事件會(huì)被丟棄,即使當(dāng)event_pool 對(duì)象完全銷毀后,仍然可以調(diào)用wake_up函數(shù),此時(shí)會(huì)直接返回。
while (true) { char buf[1024]; gets(buf); if (buf[0] == 'q') { ev->stop(); // stop the event_pool. break; } eh->wake_up(); } th.join();
使用指南:
所有對(duì)象均需使用std::shared_ptr創(chuàng)建。 每個(gè)time_handle對(duì)象和event_handle對(duì)象只能push進(jìn)一個(gè)event_pool對(duì)象。 event_handle對(duì)象可設(shè)置兩種類型:every和once,every類型允許不限次數(shù)的wake_up,event_pool會(huì)處理每次wake_up,而once類型只能被喚醒一次,但允許多次調(diào)用wake_up函數(shù)(線程安全),這意味著可以在多個(gè)線程并發(fā)的觸發(fā)事件。 time_handle對(duì)象可設(shè)置兩種類型:duration和time_point,其中duration類型通過設(shè)置duration_成員來指定從此刻開始,每間隔多少時(shí)間就觸發(fā)一次。time_point類型通過設(shè)置time_point_成員來指定在哪個(gè)時(shí)刻僅觸發(fā)一次。 回調(diào)函數(shù)的輸入?yún)?shù)就是該事件對(duì)象本身,你可以通過其訪問設(shè)置的id_,type_,args_等等。 event_pool的run函數(shù)可以在多個(gè)線程并發(fā)執(zhí)行(maybe?),這一點(diǎn)暫且不保證。
特點(diǎn):
1.輕量級(jí),200行源代碼,語言層面的跨平臺(tái),基于c++11標(biāo)準(zhǔn)。
2.僅需要頭文件,即拿即用。
todo:
定義更便于使用,減少出錯(cuò)概率的接口。 補(bǔ)充測(cè)試。
上述就是小編為大家分享的基于c++11的event-drivenlibrary的理解是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站名稱:基于c++11的event-drivenlibrary的理解是怎樣的
轉(zhuǎn)載源于:http://muchs.cn/article38/pjjipp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、App設(shè)計(jì)、搜索引擎優(yōu)化、服務(wù)器托管、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)