中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

基于c++11中event-drivenlibrary的示例分析

這篇文章主要介紹基于c++11中event-driven library的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

網站建設哪家好,找成都創新互聯!專注于網頁設計、網站建設、微信開發、成都微信小程序、集團企業網站建設等服務項目。為回饋新老客戶創新互聯還提供了電白免費建站歡迎大家使用!

做了一個不到200行的事件驅動庫,基于c++11標準,header-only,跨平臺。支持自定義事件,通過wake_up函數異步喚醒。寫這個庫的動機是想為之前自己寫的日志庫提供日志回滾機制。

github:https://github.com/chloro-pn/event_pool

event_pool

基本介紹

a header-only event-driven library based on c++11.

一個基于c++11標準,僅需要頭文件的事件驅動庫:)。

使用方法:

創建event_pool對象并申請一個線程做事件處理,在該線程中調用run函數。

  //run the event_pool.
  std::shared_ptr<event_pool> ev(new event_pool());
  std::thread th([=]()->void {
    ev->run();
  });

創建event_handle和time_handle對象并設置id_,type_,回調函數func_,上下文args_(如果是time_handle則還要設置觸發時間)等,push進event_pool對象。

  //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);

在需要觸發事件的時候調用wake_up函數(time_handle沒有wake_up函數,等待時間到達自動觸發)。當需要關閉event_pool時,調用stop函數,然后回收線程,沒有來得及處理的事件會被丟棄,即使當event_pool 對象完全銷毀后,仍然可以調用wake_up函數,此時會直接返回。

   while (true) {
    char buf[1024];
    gets(buf);
    if (buf[0] == 'q') {
     ev->stop(); // stop the event_pool.
     break;
    }
    eh->wake_up();
   }
   th.join();

使用指南:

  1. 所有對象均需使用std::shared_ptr創建。

  2. 每個time_handle對象和event_handle對象只能push進一個event_pool對象。

  3. event_handle對象可設置兩種類型:every和once,every類型允許不限次數的wake_up,event_pool會處理每次wake_up,而once類型只能被喚醒一次,但允許多次調用wake_up函數(線程安全),這意味著可以在多個線程并發的觸發事件。

  4. time_handle對象可設置兩種類型:duration和time_point,其中duration類型通過設置duration_成員來指定從此刻開始,每間隔多少時間就觸發一次。time_point類型通過設置time_point_成員來指定在哪個時刻僅觸發一次。

  5. 回調函數的輸入參數就是該事件對象本身,你可以通過其訪問設置的id_,type_,args_等等。

  6. event_pool的run函數可以在多個線程并發執行(maybe?),這一點暫且不保證。

特點:

1.輕量級,200行源代碼,語言層面的跨平臺,基于c++11標準。

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

todo:

  • 定義更便于使用,減少出錯概率的接口。

  • 補充測試。

以上是“基于c++11中event-driven library的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創新互聯行業資訊頻道!

新聞名稱:基于c++11中event-drivenlibrary的示例分析
文章位置:http://www.2m8n56k.cn/article38/pjedpp.html

成都網站建設公司_創新互聯,為您提供品牌網站建設網站收錄搜索引擎優化營銷型網站建設企業建站商城網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

小程序開發
主站蜘蛛池模板: 日韩免费高清一级毛片 | 久久综合一本 | av片免费大全在线观看不卡 | 粉嫩jk制服美女啪啪 | 亚洲天堂精品在线观看 | 亚洲日本高清影院毛片 | 色综合久久88色综合天天提莫 | 黄色一级毛片 | 欧美日韩精品国产一区在线 | 香蕉香蕉国产片一级一级毛片 | 国内成人精品亚洲日本语音 | 亚洲国产日韩精品 | 日本精品一在线观看视频 | 亚洲国产日韩欧美一区二区三区 | 久久观看 | 国产免费一区二区三区在线观看 | 另类亚洲孕妇分娩网址 | 国内精品九一在线播放 | 很黄很色的摸下面的视频 | 中文在线最新版天堂 | 一区二区三区在线 | 欧 | 免费一级毛片在线播放欧美 | 久久综合99re久久爱 | 国产欧美日韩另类 | 成人午夜久久精品 | 亚洲欧美精品中文字幕 | 黄色成人毛片 | 国产免费高清在线精品一区 | 久久99在线 | 男女一级爽爽快视频 | 国产精品欧美一区二区三区 | 欧美一级片网站 | 成人午夜视频在线播放 | 免费看91毛片 | 国产一级毛片网站 | 亚洲精品色综合色在线观看 | 久久99国产精品一区二区 | 亚洲波多野结衣日韩在线 | 97免费视频在线 | 国产精品福利社 | tom影院亚洲国产日本一区 |