genericfsm.java
来自「real-time design patterns in Real-time j」· Java 代码 · 共 82 行
JAVA
82 行
package designPatterns.Fsm;import javax.realtime.AsyncEventHandler;import javax.realtime.OneShotTimer;import javax.realtime.RelativeTime;import rtEnv.RtConstants;import utils.Semaphore;public abstract class GenericFsm { private OneShotTimer fsmTimer; private RelativeTime fsmTimeout; private Semaphore readySem; public GenericFsm(long initTimeout) { readySem = new Semaphore(); /* * Set up the timer */ // First create AsyncEventHandler for the timer AsyncEventHandler timerHndlr = new AsyncEventHandler() { public void handleAsyncEvent() { timerExpired(); } }; // Create the timer fsmTimeout = new RelativeTime(initTimeout, RtConstants.ZERO_NANOS); fsmTimer = new OneShotTimer(fsmTimeout, timerHndlr); } // Current state protected GenericFsmState state; public synchronized void setState(GenericFsmState newState) { state.exitAction(this); state = newState; state.entryAction(this); } public abstract void illegalTrigger(); /* * Timer-handling methods */ public void startTimer(long timeout) { stopTimer(); fsmTimeout.set(timeout); fsmTimer.reschedule(fsmTimeout); fsmTimer.start(); } public void stopTimer() { if (fsmTimer.isRunning()) { fsmTimer.stop(); } } public boolean isTimerActive() { return fsmTimer.isRunning(); } public void timerExpired() { stopTimer(); state.timerExpired(this); } public void initCompleted() { readySem.up(); } public void waitForInit() { readySem.down(); } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?