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 + -
显示快捷键?