OMThread 是架構基礎作用中類別。 其責任如下:
此類別在標頭檔 omthread.h 中進行定義。
OMThread 是每個作用中類別的基礎類別。 作用中類別的物件:
因此,每個作用中物件都具有 OMThread 實例,其有兩個事物組成:
依預設,應用程式中至少具有兩個執行緒:計時器執行緒及主要執行緒。 在此簡式案例中,所有事件都排入主要執行緒事件佇列中。
每個作業系統都具有原生執行緒的不同實作。
執行緒負責將事件服務提供給在其上執行的所有實例。 指派給物件的每個事件都會傳送至其相關執行緒。 執行緒會在事件佇列中儲存事件。OMThread 使用 while 迴圈,在事件出現在佇列前端時,耗用事件。
作用中物件還可以提供非作用中物件。 例如,您的應用程式可能具有類別 a,該類別具有狀態圖且處於作用中,因此其會繼承自 OMThread 及 OMReactive。 您的應用程式還可能具有類別 p,該類別具有狀態圖,但處於非作用中。 類別 p 會繼承自 OMReactive。
假設 p 在 a 的執行緒下執行。以 p 為目標的每個事件都必須儲存在某處,且 p 沒有事件佇列。 因此,p 會將以其為目的地的事件委派至 a 的事件佇列中,因為 p 在 a 的作業系統執行緒上執行,且 a 具有事件佇列。
如果您具有下列程式碼行(產生事件 e 至類別 p),則 e 會儲存在 a 的 OMThread 事件佇列中:
p -> GEN(e)
在 OMThread 中,execute 方法會輪流選取事件佇列,以尋找更多的事件。 當該方法找到一或多個事件時,它會從事件佇列中取出第一個事件(例如,e)。該事件具有指定目的地的欄位(在此範例中為 p)。 p 隨後會被告知,它應該對事件 e 做出回應。無需立即耗用該事件 - 該事件在事件佇列中等待。當到達耗用該事件的時間時,會從事件佇列中取出該事件,並使用 takeEvent 方法,將其注入 p 的 OMReactive。
在 4.0 版中,來自 OMProtected 的繼承已取代為聚集。 因此,下列內容已新增至 OMThread 介面:
aomthread
此受保護的屬性會指定執行緒的「設備測試」組件。
其定義方式如下:
AOMThread *aomthread;
AOMThread 類別在設備測試應用程式的動畫架構中定義,在非設備測試模式中會設為空類別。
endOfProcess
此公用屬性會指定應用程式是否處於處理程序的結尾。 如果是,則必須清除處理程序的最後一個執行緒。
此旗標可能的值如下:
其定義方式如下:
static int endOfProcess;
eventQueue
此受保護的屬性會指定執行緒的事件佇列。
其定義方式如下:
OMEventQueue *eventQueue;
OMEventQueue 類別在 os.h 中定義。
執行緒 (thread)
此受保護的屬性會指定執行緒的 "os" 組件。
其定義方式如下:
OMOSThread *thread;
OMOSThread 類別在 os.h 中定義。
toGuardThread
此受保護的屬性會決定是否保護執行緒程式碼的某區段。如果其設為 TRUE,則會保護程式碼。否則,不會保護程式碼。
其定義方式如下:
OMBoolean toGuardThread;
OMBoolean 在 rawtypes.h 中定義。
execute 方法在啟動其事件迴圈反覆運算之前,會檢查 toGuardThread。 如果 toGuardThread 為 TRUE,則 execute 會呼叫 OMGuard 類別 及 OMGuard 類別 巨集。