在UML狀態機中狀態之間的轉換中,您可以具有觸發器,警戒和效果。是狀態機中的阻塞系統調用呼叫事件
如果我進行阻塞系統調用(例如,在Posix系統上選擇()或在Raspberry Pi上執行wait_for_edge()),這是一個呼叫事件,因爲狀態機被阻塞,我無法繼續進行此操作?
我可以用這種方式建模這個狀態機嗎還是必須使用不同的機制?
感謝
在UML狀態機中狀態之間的轉換中,您可以具有觸發器,警戒和效果。是狀態機中的阻塞系統調用呼叫事件
如果我進行阻塞系統調用(例如,在Posix系統上選擇()或在Raspberry Pi上執行wait_for_edge()),這是一個呼叫事件,因爲狀態機被阻塞,我無法繼續進行此操作?
我可以用這種方式建模這個狀態機嗎還是必須使用不同的機制?
感謝
狀態機內部的阻塞調用違反狀態機內的事件處理的普遍假定運行到完成語義。這是因爲非阻塞(從阻塞調用返回)是將事件傳遞給狀態機的另一種方式。問題在於,當狀態機已處於處理原始事件的中間時,此「後門」事件到達。另外,在狀態機圖中沒有明確的方式顯示這種「非阻塞」事件。由於這些原因,應該在狀態機內部或者在任何真正的事件驅動系統內部避免任何阻塞調用(即使是在線延遲())。事件應嚴格通過事件循環傳遞。這種事件循環可以阻止等待事件,但這是以外的任何狀態機的。