Object 內建對象

物件Event

Event 模組提供了一個事件對象,用於協同共享資料操作。它允許多個纖程(協程)之間進行同步操作,以實現協作式多任務。事件物件有wait,pulse 和clear 三個方法,wait 方法將阻塞目前纖程,直到事件被觸發,pulse 方法將喚醒所有等待事件的纖程,而clear 方法則將事件標誌重設為false。透過使用coroutine.Event模組,開發者可以控制纖程之間的執行順序和資料共享,實現複雜業務邏輯。

舉個例子,假設我們需要兩個纖程間進行資料共享,然而它們執行的順序是不確定的,你可以透過一個事件對象,控制纖程的執行順序,保證一個纖程執行之前,觸發另一個纖程的事件。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
const 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方法等待事件觸發,而在纖程2中透過pulse方法觸發事件,當i等於5的時候,纖程2觸發事件,纖程1透過事件監聽被喚醒,繼續執行。在這個過程中,兩個纖程之間沒有使用任何的鎖或其它同步工具,但是它們在纖程層級上保證了資料的同步。

繼承關係

建構函數

Event

事件物件建構函數

1
new Event(Boolean value = false);

呼叫參數:

  • value: Boolean, 指定是否等待,為true 時等待,預設為false

成員函數

isSet

判斷事件物件是否為真

1
Boolean Event.isSet();

回傳結果:

  • Boolean, 如果事件為真,則回傳true

set

啟動事件(將事件狀態改為true),並呼叫pulse()

1
Event.set();

pulse

啟動等待該事件的所有纖程

1
Event.pulse();

clear

重置事件(將事件狀態改為false)

1
Event.clear();

wait

等待一個事件

1
Event.wait();

acquire

取得鎖的擁有權

1
Boolean Event.acquire(Boolean blocking = true);

呼叫參數:

  • blocking: Boolean, 指定是否等待,為true 時等待,預設為真

回傳結果:

  • Boolean, 回傳是否成功取得鎖,為true 表示成功獲取

acquire 方法用於取得鎖的所有權,當鎖處於可取得狀態時,此方法立即傳回true。

當鎖不可獲取,且blocking 為true,則目前纖程進入休眠,當其他纖程釋放鎖後,此方法傳回true。

當鎖不可取得,且blocking 為false,則方法傳回false。


release

釋放鎖的擁有權

1
Event.release();

此方法將釋放對鎖的擁有權,如果目前纖程未擁有鎖,此方法將拋出錯誤。


count

查詢目前等待任務數

1
Integer Event.count();

回傳結果:

  • Integer, 返回任務數

toString

傳回物件的字串表示,一般回傳"[Native Object]",物件可以根據自己的特性重新實現

1
String Event.toString();

回傳結果:

  • String, 傳回物件的字串表示

toJSON

傳回物件的JSON 格式表示,一般傳回物件定義的可讀屬性集合

1
Value Event.toJSON(String key = "");

呼叫參數:

  • key: String, 未使用

回傳結果:

  • Value, 傳回包含可JSON 序列化的值