亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于c++11的event-driven library的理解

 更新時(shí)間:2020年02月12日 16:00:52   作者:p__n  
這篇文章主要介紹了基于c++11的event-driven library的理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

做了一個(gè)不到200行的事件驅(qū)動(dòng)庫(kù),基于c++11標(biāo)準(zhǔn),header-only,跨平臺(tái)。支持自定義事件,通過(guò)wake_up函數(shù)異步喚醒。寫(xiě)這個(gè)庫(kù)的動(dòng)機(jī)是想為之前自己寫(xiě)的日志庫(kù)提供日志回滾機(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)庫(kù):)。

使用方法:

創(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沒(méi)有wake_up函數(shù),等待時(shí)間到達(dá)自動(dòng)觸發(fā))。當(dāng)需要關(guān)閉event_pool時(shí),調(diào)用stop函數(shù),然后回收線程,沒(méi)有來(lái)得及處理的事件會(huì)被丟棄,即使當(dāng)event_pool 對(duì)象完全銷(xiāo)毀后,仍然可以調(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();

使用指南:

  1. 所有對(duì)象均需使用std::shared_ptr創(chuàng)建。
  2. 每個(gè)time_handle對(duì)象和event_handle對(duì)象只能push進(jìn)一個(gè)event_pool對(duì)象。
  3. event_handle對(duì)象可設(shè)置兩種類(lèi)型:every和once,every類(lèi)型允許不限次數(shù)的wake_up,event_pool會(huì)處理每次wake_up,而once類(lèi)型只能被喚醒一次,但允許多次調(diào)用wake_up函數(shù)(線程安全),這意味著可以在多個(gè)線程并發(fā)的觸發(fā)事件。
  4. time_handle對(duì)象可設(shè)置兩種類(lèi)型:duration和time_point,其中duration類(lèi)型通過(guò)設(shè)置duration_成員來(lái)指定從此刻開(kāi)始,每間隔多少時(shí)間就觸發(fā)一次。time_point類(lèi)型通過(guò)設(shè)置time_point_成員來(lái)指定在哪個(gè)時(shí)刻僅觸發(fā)一次。
  5. 回調(diào)函數(shù)的輸入?yún)?shù)就是該事件對(duì)象本身,你可以通過(guò)其訪問(wèn)設(shè)置的id_,type_,args_等等。
  6. event_pool的run函數(shù)可以在多個(gè)線程并發(fā)執(zhí)行(maybe?),這一點(diǎn)暫且不保證。

特點(diǎn):

1.輕量級(jí),200行源代碼,語(yǔ)言層面的跨平臺(tái),基于c++11標(biāo)準(zhǔn)。

2.僅需要頭文件,即拿即用。

todo:

  • 定義更便于使用,減少出錯(cuò)概率的接口。
  • 補(bǔ)充測(cè)試。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解C語(yǔ)言編程中的函數(shù)指針以及函數(shù)回調(diào)

    詳解C語(yǔ)言編程中的函數(shù)指針以及函數(shù)回調(diào)

    這篇文章主要介紹了C語(yǔ)言編程中的函數(shù)指針以及函數(shù)回調(diào),函數(shù)回調(diào)實(shí)際上就是讓函數(shù)指針作函數(shù)參數(shù)、調(diào)用時(shí)傳入函數(shù)地址,需要的朋友可以參考下
    2016-04-04
  • C++ AVLTree高度平衡的二叉搜索樹(shù)深入分析

    C++ AVLTree高度平衡的二叉搜索樹(shù)深入分析

    這篇文章主要介紹了C++ AVLTree高度平衡的二叉搜索樹(shù),二叉搜索樹(shù)雖可以縮短查找的效率,但如果數(shù)據(jù)有序或接近有序二叉搜索樹(shù)將退化為單支樹(shù),查找元素相當(dāng)于在順序表中搜索元素,效率低下
    2023-03-03
  • C++中CString string char* char 之間的字符轉(zhuǎn)換(多種方法)

    C++中CString string char* char 之間的字符轉(zhuǎn)換(多種方法)

    在寫(xiě)程序的時(shí)候,我們經(jīng)常遇到各種各樣的類(lèi)型轉(zhuǎn)換,比如 char* CString string 之間的互相轉(zhuǎn)換,這里簡(jiǎn)單為大家介紹一下,需要的朋友可以參考下
    2017-09-09
  • C語(yǔ)言算法打卡回文串驗(yàn)證算法題解

    C語(yǔ)言算法打卡回文串驗(yàn)證算法題解

    這篇文章主要為大家介紹了C語(yǔ)言算法打卡萬(wàn)人千提的leetcode回文串的驗(yàn)證算法題解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • C語(yǔ)言字符串快速壓縮算法代碼

    C語(yǔ)言字符串快速壓縮算法代碼

    這篇文章主要介紹了C語(yǔ)言字符串快速壓縮算法代碼,將字符串中連續(xù)出席的重復(fù)字母進(jìn)行壓縮,其主要的壓縮字段的格式為”字符重復(fù)的次數(shù)+字符”。有需要的小伙伴參考下吧。
    2015-03-03
  • C語(yǔ)言庫(kù)函數(shù)strcpy的使用及模擬實(shí)現(xiàn)

    C語(yǔ)言庫(kù)函數(shù)strcpy的使用及模擬實(shí)現(xiàn)

    本文主要介紹了C語(yǔ)言庫(kù)函數(shù)strcpy的使用及模擬實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • C++多線程中的鎖和條件變量使用教程

    C++多線程中的鎖和條件變量使用教程

    這篇文章主要介紹了C++多線程中的鎖和條件變量使用,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • C++未定義行為(undefined behavior)

    C++未定義行為(undefined behavior)

    對(duì)于未定義行為,C++標(biāo)準(zhǔn)沒(méi)有明確規(guī)定編譯器們應(yīng)該怎么做,那么執(zhí)行的結(jié)果就是不可預(yù)料的。下面我們來(lái)詳細(xì)探討下
    2017-02-02
  • C++基于QWidget和QLabel實(shí)現(xiàn)圖片縮放,拉伸與拖拽

    C++基于QWidget和QLabel實(shí)現(xiàn)圖片縮放,拉伸與拖拽

    這篇文章主要為大家詳細(xì)介紹了C++如何基于QWidget和QLabel實(shí)現(xiàn)圖片縮放、拉伸與拖拽等功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • C語(yǔ)言PlaySound函數(shù)使用方法

    C語(yǔ)言PlaySound函數(shù)使用方法

    這篇文章介紹了C語(yǔ)言PlaySound函數(shù)的使用方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評(píng)論