mirror of
https://github.com/deepseek-ai/3FS
synced 2025-06-04 03:47:24 +00:00
64 lines
1.5 KiB
OpenEdge ABL
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;
|
|
} |