オブジェクトイベント
イベント モジュールは、共同的な共有データ操作のためのイベント オブジェクトを提供します。これにより、複数のファイバー (コルーチン) 間の同期操作が可能になり、協調的なマルチタスクを実現できます。イベント オブジェクトには、wait、pulse、clear の 3 つのメソッドがあります。wait メソッドは、イベントがトリガーされるまで現在のファイバーをブロックし、pulse メソッドは、イベントを待機しているすべてのファイバーをウェイクアップし、clear メソッドはイベント フラグをリセットします。間違い。を使用してcoroutine.Eventこのモジュールを使用すると、開発者は実行シーケンスとファイバー間のデータ共有を制御して、複雑なビジネス ロジックを実装できます。
たとえば、2 つのファイバー間でデータを共有する必要があるが、その実行順序が不確実であるとします。イベント オブジェクトを通じてファイバーの実行順序を制御して、一方のファイバーが他方のファイバーが実行される前にトリガーされるようにすることができます。ファイバー イベント
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19const coroutine = require('coroutine');
var evt = new coroutine.Event();
coroutine.start(function() {
console.log('[1] wait for event');
evt.wait();
console.log('[1] receive event');
});
coroutine.start(function() {
loop: for (var i = 0; i < 10; i++) {
console.log('[2] do some work');
if (i === 5) {
evt.pulse();
}
coroutine.sleep(1000);
}
});
上の例では、イベント オブジェクト evt を作成し、ファイバー 1 で wait メソッドを使用してイベントがトリガーされるのを待機し、pulse メソッドを使用してファイバー 2 でイベントをトリガーしました。i が 5 に等しい場合、ファイバー 2 はイベントをトリガーします。 、ファイバー 1 はイベントのリスニングを通じて起動され、実行を継続します。このプロセスでは、2 つのファイバー間でロックやその他の同期ツールは使用されませんが、ファイバー レベルでのデータ同期が保証されます。
相続関係
コンストラクタ
Event
イベントオブジェクトコンストラクター
1new Event(Boolean value = false);
呼び出しパラメータ:
- value: ブール値、待機するかどうかを指定します。true の場合は待機します。デフォルトは false です。
メンバー関数
isSet
イベントオブジェクトがtrueかどうかを判定する
1Boolean Event.isSet();
返される結果:
- Boolean、イベントが true の場合、true を返します。
set
イベントをアクティブ化し(イベントステータスをtrueに変更し)、pulse()を呼び出します。
1Event.set();
pulse
このイベントを待っているすべてのファイバーをアクティブにする
1Event.pulse();
clear
イベントをリセット (イベントのステータスを false に変更)
1Event.clear();
wait
イベントを待つ
1Event.wait();
acquire
ロックの所有権を取得する
1Boolean Event.acquire(Boolean blocking = true);
呼び出しパラメータ:
- blocking: ブール値、待機するかどうかを指定します。true の場合は待機します。デフォルトは true
返される結果:
- Boolean、ロックが正常に取得されたかどうかを返します。true は取得が成功したことを示します。
取得メソッドは、ロックの所有権を取得するために使用され、ロックが取得可能な状態にある場合、このメソッドはすぐに true を返します。
ロックが取得できず、ブロッキングが true の場合、現在のファイバーはスリープ状態になり、他のファイバーがロックを解放すると、このメソッドは true を返します。
ロックを取得できず、ブロッキングが false の場合、メソッドは false を返します。
release
ロックの所有権を解放する
1Event.release();
このメソッドはロックの所有権を解放するか、現在のファイバーがロックを所有していない場合はエラーをスローします。
count
現在待機中のタスクの数を問い合わせる
1Integer Event.count();
返される結果:
- Integer、タスクの数を返します
toString
オブジェクトの文字列表現を返します。通常、「[Native Object]」が返されます。オブジェクトは、独自の特性に従って再実装できます。
1String Event.toString();
返される結果:
- String、オブジェクトの文字列表現を返します。
toJSON
オブジェクトの JSON 形式表現を返します。通常は、オブジェクトによって定義された読み取り可能なプロパティのコレクションを返します。
1Value Event.toJSON(String key = "");
呼び出しパラメータ:
- key: 文字列、使用されません
返される結果:
- Value、シリアル化可能な JSON を含む値を返します