c++11ベースevent-driven library.

3053 ワード

200行未満のイベントドライバライブラリを作成し、c++11規格、header-only、プラットフォーム間で作成しました.カスタムイベントをサポートし、wake_を介してup関数非同期起動.このライブラリを書く動機は、以前に自分で書いたログライブラリにログロールバックメカニズムを提供することです.
github: https://github.com/chloro-pn/...
event_pool
基本的な紹介
a header-only event-driven library based on c++11.
c++11規格に基づいて、ヘッダファイルのみを必要とするイベントドライバライブラリ:).
使用方法:
  • event_を作成poolオブジェクトは、run関数を呼び出すスレッドをイベント処理として申請します.
  •     //run the event_pool.
        std::shared_ptr ev(new event_pool());
        std::thread th([=]()->void {
            ev->run();
        });
    
  • event_を作成handleとtime_handleオブジェクトとid_を設定し、type_,コールバック関数func_,コンテキストargs_(time_handleの場合はトリガ時間も設定)など、event_poolオブジェクトにpushを入力します.
  •     //create time_handle.
        std::shared_ptr 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 self)->void {
                std::cout << self->id_ << " wake up !" << std::endl;
        };
        //create event_handle.
        std::shared_ptr eh(new event_handle());
        eh->id_ = "back cout ";
        eh->type_ = event_handle::type::every;
        eh->args_ = nullptr;
        eh->func_ = [](std::shared_ptr self)->void {
            std::cout << self->id_ << " wake up !"<<:endl 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();
    

    使用マニュアル:
  • すべてのオブジェクトはstd::shared_を使用する必要があります.ptr作成.
  • 各time_handleオブジェクトとevent_handleオブジェクトには1つのevent_しか入力できませんpoolオブジェクト.
  • event_handleオブジェクトは、everyとonceの2つのタイプを設定できます.everyタイプは回数を制限しないwake_を許可します.up,event_poolは毎回wake_を処理しますup、onceタイプは1回しか起動できませんが、wake_を複数回呼び出すことができます.up関数(スレッドセキュリティ)は、複数のスレッドで同時実行可能なトリガイベントを意味します.
  • time_handleオブジェクトは、durationとtime_の2つのタイプを設定できます.ポイント、durationタイプがduration_を設定するメンバーは、これからどのくらいの間隔でトリガーされるかを指定します.time_ポイントタイプtime_を設定するpoint_メンバーは、どの時点で1回のみトリガーされるかを指定します.
  • コールバック関数の入力パラメータは、イベントオブジェクト自体であり、設定されたid_にアクセスできます.type_,args_などなど.
  • event_poolのrun関数は、複数のスレッドで同時に実行できる点は保証されていません.
  • 特徴:
    1.軽量レベル、200行のソースコード、言語レベルのプラットフォーム間で、c++11標準に基づいている.
    2.ヘッダーファイルのみが必要で、すぐに使用できます.
    todo:
  • は、より使いやすく、エラー確率を低減するインタフェースを定義します.
  • 補足テスト.