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関数を呼び出すスレッドをイベント処理として申請します. event_を作成handleとtime_handleオブジェクトとid_を設定し、type_,コールバック関数func_,コンテキストargs_(time_handleの場合はトリガ時間も設定)など、event_poolオブジェクトにpushを入力します. イベントをトリガーする必要があるときにwake_を呼び出すup関数(time_handleにはwake_up関数がなく、待ち時間が自動トリガに達する).event_poolを閉じる必要がある場合はstop関数を呼び出し、スレッドを回収し、処理に間に合わないイベントは破棄され、event_poolオブジェクトが完全に破棄された後もwake_up関数を呼び出すことができ、この場合は直接返される.
使用マニュアル:すべてのオブジェクトは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:は、より使いやすく、エラー確率を低減するインタフェースを定義します. 補足テスト.
github: https://github.com/chloro-pn/...
event_pool
基本的な紹介
a header-only event-driven library based on c++11.
c++11規格に基づいて、ヘッダファイルのみを必要とするイベントドライバライブラリ:).
使用方法:
//run the event_pool.
std::shared_ptr ev(new event_pool());
std::thread th([=]()->void {
ev->run();
});
//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);
while (true) {
char buf[1024];
gets(buf);
if (buf[0] == 'q') {
ev->stop(); // stop the event_pool.
break;
}
eh->wake_up();
}
th.join();
使用マニュアル:
1.軽量レベル、200行のソースコード、言語レベルのプラットフォーム間で、c++11標準に基づいている.
2.ヘッダーファイルのみが必要で、すぐに使用できます.
todo: