eventpp、私のオープンソースC++イベント配布とコールバックコードライブラリを紹介します

3001 ワード

私(wqking)は開発して、標準C++11規範を使います.
eventppはC++イベントライブラリであり、アプリケーションコンポーネントがイベントをスケジュールし、それらをリスニングすることによって相互通信できるようにするツールを提供します.eventppを使用すると、信号/スロットメカニズムまたはオブザーバモードを簡単に実現できます.
とくせい
  • は、同期イベントスケジューリングおよび非同期イベントキューをサポートします.
  • は、構成および拡張可能なポリシーおよびmixinsを有する.
  • はmixinsによってイベントフィルタをサポートします.
  • はネストされたイベントをサポートします.イベントの処理中に、リスナーはイベントを安全にスケジュールし、他のリスナーを追加/プリセット/挿入/削除することができます.
  • スレッドは安全です.マルチスレッドをサポートします.
  • 異常安全.ほとんどの操作は強い異常安全を保証します.
  • は大量のユニットテストで品質を保証する.
  • は速度が速い.EventQueueは、1秒以内に10 Mイベント(ミリ秒当たり10 Kイベント)を処理することができる.CallbackListは、100 Mコールバック(ミリ秒当たり100 Kコールバック)を1秒以内に呼び出すことができる.CallbackListは、5 Mコールバック(ミリ秒当たり5 Kコールバック)を1秒以内に追加/削除することができる.
  • は柔軟で使いやすい.
  • リスナーおよびイベントは、ベースクラスから継承する必要がなく、任意のタイプであってもよい.
  • 純ヘッダファイルは、ソースファイルがなく、構築する必要はありません.他のライブラリに依存しません.
  • はC++11(MSVC 2017、MSVC 2015、MinGW(Msys)gcc 7.2とUbuntu gcc 5.4を使用してテスト)が必要です.
  • は移植可能な標準のC++で記述されている.

  • Version:0.1.0 License:Apache License  Version 2.0 GitHub:https://github.com/wqking/eventpp
    CallbackListの使用
    #include "eventpp/callbacklist.h"
    eventpp::CallbackList callbackList;
    callbackList.append([](const std::string & s, const bool b) {
        std::cout << std::boolalpha << "Got callback 1, s is " << s << " b is " << b << std::endl;
    });
    callbackList.append([](std::string s, int b) {
        std::cout << std::boolalpha << "Got callback 2, s is " << s << " b is " << b << std::endl;
    });
    callbackList("Hello world", true);

    EventDispatcherの使用
    #include "eventpp/eventdispatcher.h"
    eventpp::EventDispatcher dispatcher;
    dispatcher.appendListener(3, []() {
        std::cout << "Got event 3." << std::endl;
    });
    dispatcher.appendListener(5, []() {
        std::cout << "Got event 5." << std::endl;
    });
    dispatcher.appendListener(5, []() {
        std::cout << "Got another event 5." << std::endl;
    });
    // dispatch event 3
    dispatcher.dispatch(3);
    // dispatch event 5
    dispatcher.dispatch(5);

    EventQueueの使用
    eventpp::EventQueue queue;
    
    dispatcher.appendListener(3, [](const std::string s, bool b) {
        std::cout << std::boolalpha << "Got event 3, s is " << s << " b is " << b << std::endl;
    });
    dispatcher.appendListener(5, [](const std::string s, bool b) {
        std::cout << std::boolalpha << "Got event 5, s is " << s << " b is " << b << std::endl;
    });
    
    // The listeners are not triggered during enqueue.
    queue.enqueue(3, "Hello", true);
    queue.enqueue(5, "World", false);
    
    // Process the event queue, dispatch all queued events.
    queue.process();