0
我一直在使用boost的異步狀態圖來編寫程序。在這個程序中,我使用異步串行端口與其他設備進行通信。我有一個狀態,通過串口等待設備確認,然後發佈「收到確認」事件。這很好,但我也想實現一個「超時」事件。boost :: statechart ---發佈「serial timeout」事件
在以前的程序中,我一直在爲我的狀態機使用switch case語句,我的代碼可以在每次循環運行時運行。這意味着我可以運行代碼並檢查是否應該由於某些事情超時而改變狀態。像這樣:
while(1){
switch (state){
case 0:{
sendMessage();
state = 1;
sendTime = boost::chrono::steady_clock::now();
}
break;
case 1:{
if (isConfirmationReceived()){
// do something
state = 2;
}
else if (boost::chrono::steady_clock::now() > sendTime + boost::chrono::duration<double>(WAIT_LENGTH)){
//raise a time out error
state = 3;
}
}
break;
// etc etc
}
}
我該如何使用boost :: StateChart實現類似這樣的事情?我應該考慮這個完全不同的方式嗎?