From 30cae2492d8d8e927d57c0dc656ee2dfbec0a70c Mon Sep 17 00:00:00 2001
From: Raimo Niskanen
Date: Mon, 13 Feb 2017 08:20:16 +0100
Subject: Implement {timeout,Name} timeouts
---
lib/stdlib/doc/src/gen_statem.xml | 100 +++++++++++++++++++++++++++++---------
1 file changed, 77 insertions(+), 23 deletions(-)
(limited to 'lib/stdlib/doc/src')
diff --git a/lib/stdlib/doc/src/gen_statem.xml b/lib/stdlib/doc/src/gen_statem.xml
index 44ac1ad8ad..1b99b65e09 100644
--- a/lib/stdlib/doc/src/gen_statem.xml
+++ b/lib/stdlib/doc/src/gen_statem.xml
@@ -67,13 +67,16 @@
It has the same features and adds some really useful:
- - State code is gathered.
- - The state can be any term.
- - Events can be postponed.
- - Events can be self-generated.
- - Automatic state enter code can be called.
- - A reply can be sent from a later state.
- - There can be multiple sys traceable replies.
+ - Gathered state code.
+ - Arbitrary term state.
+ - Event postponing.
+ - Self-generated events.
+ - State time-out.
+ - Multiple generic named time-outs.
+ - Absolute time-out time.
+ - Automatic state enter calls.
+ - Reply from other state than the request.
+ - Multiple sys traceable replies.
The callback model(s) for gen_statem differs from
@@ -531,10 +534,12 @@ handle_event(_, _, State, Data) ->
originate from the corresponding API functions.
For calls, the event contains whom to reply to.
Type info originates from regular process messages sent
- to the gen_statem. Also, the state machine
- implementation can generate events of types
- timeout, state_timeout,
- and internal to itself.
+ to the gen_statem. The state machine
+ implementation can, in addition to the above,
+ generate
+ events of types
+ timeout, {timeout,Name},
+ state_timeout, and internal to itself.
@@ -701,13 +706,14 @@ handle_event(_, _, State, Data) ->
-
- Timeout timers
- state_timeout()
+ Time-out timers
+ event_timeout(),
+ generic_timeout()
and
- event_timeout()
+ state_timeout()
are handled. Time-outs with zero time are guaranteed to be
delivered to the state machine before any external
- not yet received event so if there is such a timeout requested,
+ not yet received event so if there is such a time-out requested,
the corresponding time-out zero event is enqueued as
the newest event.
@@ -795,8 +801,8 @@ handle_event(_, _, State, Data) ->
erlang:start_timer/4
for how Time and
Options
- are interpreted. All Options of erlang:start_timer/4
- will not necessarily be supported in the future.
+ are interpreted. Future erlang:start_timer/4 Options
+ will not necessarily be supported.
Any event that arrives cancels this time-out.
@@ -821,6 +827,42 @@ handle_event(_, _, State, Data) ->
+
+
+
+
+ Starts a timer set by
+ enter_action()
+ {timeout,Name}.
+ When the timer expires an event of
+ event_type()
+ {timeout,Name} will be generated.
+ See
+ erlang:start_timer/4
+ for how Time and
+ Options
+ are interpreted. Future erlang:start_timer/4 Options
+ will not necessarily be supported.
+
+
+ If Time is infinity,
+ no timer is started, as it never would expire anyway.
+
+
+ If Time is relative and 0
+ no timer is actually started,
+ instead the the time-out event is enqueued to ensure
+ that it gets processed before any not yet
+ received external event.
+
+
+ Setting a timer with the same Name while it is running
+ will restart it with the new time-out value.
+ Therefore it is possible to cancel
+ a specific time-out by setting it to infinity.
+
+
+
@@ -835,8 +877,8 @@ handle_event(_, _, State, Data) ->
erlang:start_timer/4
for how Time and
Options
- are interpreted. All Options of erlang:start_timer/4
- will not necessarily be supported in the future.
+ are interpreted. Future erlang:start_timer/4 Options
+ will not necessarily be supported.
If Time is infinity,
@@ -861,7 +903,7 @@ handle_event(_, _, State, Data) ->
If Abs is true an absolute timer is started,
- and if it false a relative, which is the default.
+ and if it is false a relative, which is the default.
See
erlang:start_timer/4
for details.
@@ -986,7 +1028,19 @@ handle_event(_, _, State, Data) ->
transition_option()
event_timeout()
to Time with EventContent
- and options
+ and time-out options
+ Options.
+
+
+ {timeout,Name}
+ -
+
+ Sets the
+ transition_option()
+ generic_timeout()
+ to Time for Name
+ with EventContent
+ and time-out options
Options.
@@ -997,7 +1051,7 @@ handle_event(_, _, State, Data) ->
transition_option()
state_timeout()
to Time with EventContent
- and options
+ and time-out options
Options.
@@ -1270,7 +1324,7 @@ handle_event(_, _, State, Data) ->
to avoid that the calling process dies when the call
times out, you will have to be prepared to handle
a late reply.
- So why not just allow the calling process to die?
+ So why not just let the calling process die?
--
cgit v1.2.3