如何執行FSM(編輯:有限狀態機)狀態? 我通常會考慮一個像一組函數的FSM, 調度程序, 和一個線程來指示當前的運行狀態。 意思是說,我阻止了對代表 狀態的函數/函子的調用。FSM狀態的實現技術
剛纔我已經實現了一個不同的風格, 在那裏我仍然代表與功能(對象)S狀態,但線程 只是調用一個方法state->step()
,它試圖儘可能快地返回 。如果州已經完成並且應該進行轉換,則表示相應地。 我稱此爲「投票」的風格,因爲功能大多看起來像 :
void step()
{
if(!HaveReachedGoal)
{
doWhateverNecessary();
return; // get out as fast as possible
}
// ... test perhaps some more subgoals
indicateTransition();
}
我知道,這是一個有限狀態機內的FSM。
這感覺相當簡單,但它有一定的優勢。 雖然一個線程被阻塞,或者持有某種類型的循環可能很麻煩並且笨拙,但是輪詢更容易進行調試。 這是因爲FSM
對象每步都在 之後重新獲得控制權,並且發佈一些調試信息是一件輕而易舉的事情。
那麼我偏離我的問題: 你如何實現有限狀態機的狀態?
飛行意大利麪怪物? – Skilldrick 2010-06-21 11:21:47
@Skilldrick:有限狀態機 – sepp2k 2010-06-21 11:24:47
有限狀態機(如果你不是在開玩笑)。 – 2010-06-21 11:25:49