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。
AOMThread *aomthread;
AOMThread 類別在設備測試應用程式的動畫架構中定義,在非設備測試模式中會設為空類別。
此公用屬性會指定應用程式是否處於處理程序的結尾。 如果是,則必須清除處理程序的最後一個執行緒。
static int endOfProcess;
OMEventQueue *eventQueue;
OMOSThread *thread;
此受保護的屬性會決定是否保護執行緒程式碼的某區段。如果其設為 TRUE,則會保護程式碼。否則,不會保護程式碼。
OMBoolean toGuardThread; OMBoolean 在 rawtypes.h 中定義。
execute 方法在啟動其事件迴圈反覆運算之前,會檢查 toGuardThread。 如果 toGuardThread 為 TRUE,則 execute 會呼叫 OMGuard 類別 及 OMGuard 類別 巨集。