BUIW的架構和訊息流程

2021-05-10 03:15:42 字數 2365 閱讀 4136

buiw的基本框架如下圖,這幅圖是比較完整的乙個結構,

rootform

通過乙個

vectormodel

管理所有

forms

;通過乙個

rootcontainer

管理所有

rootform

上的widgets

和其它form

的piwidget

成員(xycontainer

型別,其它所有

forms

都通過自己的

piwidget

管理自己的子

container

或子widget)。

插入乙個新的

form

的過程(rootform_insertform):

1. 分別找到新

form

和對應piwidget

在piforms

和piwidget

中的位置。 2.

分別把form

插入piforms

和picontainer。

3. 更新

formstack

,包括:

(1)設定最頂層

form

為active狀態

(2) 所有其他

forms

設為not active狀態

(3) 設定

activeform

偵聽函式

(4)設定最上面的非

popup form

偵聽函式

(5)所有popup forms

和最上面的非

popupforms

需要顯示,把它們的

piwidget

àbshow

標誌位都置為1

(6) 其它

forms

不必顯示,把它們的

piwidget->bshow

標誌位都清零

(7)設定focus widget

,設定過程是乙個遞迴呼叫的過程,一直會設定到最上層

form

的最底層乙個

container

最底層的

widget。

(8) softkey widget

在最頂層

form

的piwidget下面

(9) title widget

在最上面的非

popupform

下面,如果沒有

popup forms

,則為topform---softkeywidget---titlewidget

由上述插入過程基本可以看出整個

buiw

的form---contaienr---widget

的框架了。

下面再來看其訊息處理流程:

(1)把訊息傳給

rootform

,由rootform_handleevent處理

(2) rootform_handleevent

首先查詢當前

widget

處理,分兩步: l

如果此時

rootform

指定了piwcapture

,用該widget

處理該訊息,

piwcapture

在設定touch

的時候會指定好; l

如果未指定

piwcapture

,則由當前

focus widget

處理。插入

form

過程中指定

focus widget

過程上面已經描述過了;

(3)如果此時仍然沒有被處理,則轉給當前

topform處理

幾個概念區分: 1.

bactive

是標誌當前

form

是否active

的標誌位;最頂層

form

為active

狀態,另外,當

處於啟用狀態時,

rootform

的bactive

也為true

,而被掛起的時候

rootform

的bactive

被置為false。

rootform->piactivewidget指向當前topform的piwidget。 2.

pfocus

是每個container

用來儲存其子控制項中的

focus

控制項指標的變數。 3.

piwcapture

是rootform

用來儲存支援觸控操作時當前操作的

widget。

訊息的寫入和讀取流程

接之前幾篇訊息中介軟體元件的模組劃分,本篇內容講述訊息的寫入和讀取流程。佇列模型 在描述訊息的寫入和讀取流程之前,首先要弄清楚訊息佇列的模型是怎麼樣的,包括訊息是怎麼儲存的。簡化的佇列模型大致如上圖所示。儲存模型 為了便於理解,上面的佇列模型中僅僅將訊息的乙個寫入佇列抽象成乙個topic parti...

BS架構下使用訊息佇列的工作流程

非同步通訊 對於bs browser server 瀏覽器 架構,很多情景下server的處理時間較長。如果瀏覽器傳送請求後,保持跟server的連線,等待server響應,那麼一方面會對使用者的體驗有負面影響 另一方面,很有可能會由於超時,提示使用者服務請求失敗。對於這種情景,訊息佇列提供了乙個較...

BS架構下使用訊息佇列的工作流程

非同步通訊 對於bs browser server 瀏覽器 架構,很多情景下server的處理時間較長。如果瀏覽器傳送請求後,保持跟server的連線,等待server響應,那麼一方面會對使用者的體驗有負面影響 另一方面,很有可能會由於超時,提示使用者服務請求失敗。對於這種情景,訊息佇列提供了乙個較...