Module Lwt_timeout
Contents
Instructions: Use this module in your project
In the IDE (CLion, Visual Studio Code, Xcode, etc.) you use for your DkSDK project:
Add the following to your project's
dependencies/CMakeLists.txt
:DkSDKProject_DeclareAvailable(lwt CONSTRAINT "= 5.6.1" FINDLIBS lwt lwt.unix) DkSDKProject_MakeAvailable(lwt)
Add the
Findlib::lwt
library to any desired targets insrc/*/CMakeLists.txt
:target_link_libraries(YourPackage_YourLibraryName # ... existing libraries, if any ... Findlib::lwt)
Click your IDE's
Build
button
Not using DkSDK?
FIRST, do one or all of the following:
Run:
opam install lwt.5.6.1
Edit your
dune-project
and add:(package (name YourExistingPackage) (depends ; ... existing dependenices ... (lwt (>= 5.6.1))))
Then run:
dune build *.opam # if this fails, run: dune build
Edit your
<package>.opam
file and add:depends: [ # ... existing dependencies ... "lwt" {>= "5.6.1"} ]
Then run:
opam install . --deps-only
FINALLY, add the lwt.unix
library to any desired (library)
and/or (executable)
targets in your **/dune
files:
(library
(name YourLibrary)
; ... existing library options ...
(libraries
; ... existing libraries ...
lwt.unix))
(executable
(name YourExecutable)
; ... existing executable options ...
(libraries
; ... existing libraries ...
lwt.unix))
type
t
val
create : ``int
->
``(``unit
->
unit)``
->
t
Lwt_timeout.create n f
creates a new timeout object with duration n
seconds. f
is the action, a function to be called once the timeout
expires. f
should not raise exceptions.
The timeout is not started until Lwt_timeout.start
is
called on it.
val
start :
t
->
unit
Starts the given timeout.
Starting a timeout that has already been started has the same effect as
stopping it, and then restarting it with its original duration. So,
suppose you have timeout
with a duration of three seconds, which was
started two seconds ago. The next call to its action is scheduled for
one second in the future. Calling Lwt_timeout.start timeout
at this
point cancels this upcoming action call, and schedules a call three
seconds from now.
val
stop :
t
->
unit
Stops (cancels) the given timeout.
val
change :
t
->
``int
->
unit
Changes the duration of the given timeout.
If the timeout has already been started, it is stopped, and restarted
with its new duration. This is similar to how
Lwt_timeout.start
works on a timeout that has already
been started.
val
set_exn_handler : ``(``exn
->
unit)``
->
unit
Lwt_timeout.set_exn_handler f
sets the handler to be used for
exceptions raised by timeout actions. Recall that actions are not
allowed to raise exceptions. If they do raise an exception exn
despite
this, f exn
is called.
The default behavior of f exn
, set by Lwt_timeout
on program
startup, is to pass exn
to
!
Lwt.async_exception_hook
. The
default behavior of that is to terminate the process.