3FS/specs/Timer/PSrc/Timer.p
2025-02-27 21:53:53 +08:00

64 lines
1.5 KiB
OpenEdge ABL

/*****************************************************************************************
The timer state machine models the non-deterministic behavior of an OS timer
******************************************************************************************/
machine Timer
{
// user of the timer
var client: machine;
start state Init {
entry (_client : machine){
client = _client;
goto WaitForTimerRequests;
}
}
state WaitForTimerRequests {
on eStartTimer goto TimerStarted;
ignore eCancelTimer, eDelayedTimeOut;
}
state TimerStarted {
defer eStartTimer;
entry {
if($)
{
send client, eTimeOut;
goto WaitForTimerRequests;
}
else
{
send this, eDelayedTimeOut;
}
}
on eDelayedTimeOut goto TimerStarted;
on eCancelTimer goto WaitForTimerRequests;
}
}
/************************************************
Events used to interact with the timer machine
************************************************/
event eStartTimer;
event eCancelTimer;
event eTimeOut;
event eDelayedTimeOut;
/************************************************
Functions or API's to interact with the OS Timer
*************************************************/
// create timer
fun CreateTimer(client: machine) : Timer
{
return new Timer(client);
}
// start timer
fun StartTimer(timer: Timer)
{
send timer, eStartTimer;
}
// cancel timer
fun CancelTimer(timer: Timer)
{
send timer, eCancelTimer;
}