Module Event
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(ocaml CONSTRAINT "= 4.14.0" FINDLIBS str unix runtime_events threads dynlink) DkSDKProject_MakeAvailable(ocaml)
Add the
Findlib::ocaml
library to any desired targets insrc/*/CMakeLists.txt
:target_link_libraries(YourPackage_YourLibraryName # ... existing libraries, if any ... Findlib::ocaml)
Click your IDE's
Build
button
Not using DkSDK?
FIRST, do one or all of the following:
Run:
opam install ocaml.4.14.0
Edit your
dune-project
and add:(package (name YourExistingPackage) (depends ; ... existing dependenices ... (ocaml (>= 4.14.0))))
Then run:
dune build *.opam # if this fails, run: dune build
Edit your
<package>.opam
file and add:depends: [ # ... existing dependencies ... "ocaml" {>= "4.14.0"} ]
Then run:
opam install . --deps-only
FINALLY, add the unix threads
library to any desired (library)
and/or (executable)
targets in your **/dune
files:
(library
(name YourLibrary)
; ... existing library options ...
(libraries
; ... existing libraries ...
unix threads))
(executable
(name YourExecutable)
; ... existing executable options ...
(libraries
; ... existing libraries ...
unix threads))
type
``'a channel
The type of communication channels carrying values of type 'a
.
val
new_channel : ``unit
->
'a
channel
Return a new channel.
type
``+'a event
The type of communication events returning a result of type 'a
.
send ch v
returns the event consisting in sending the value v
over
the channel ch
. The result value of this event is ()
.
receive ch
returns the event consisting in receiving a value from the
channel ch
. The result value of this event is the value received.
val
always :
'a
->
'a
event
always v
returns an event that is always ready for synchronization.
The result value of this event is v
.
choose evl
returns the event that is the alternative of all the events
in the list evl
.
wrap ev fn
returns the event that performs the same communications as
ev
, then applies the post-processing function fn
on the return
value.
wrap_abort ev fn
returns the event that performs the same
communications as ev
, but if it is not selected the function fn
is
called after the synchronization.
guard fn
returns the event that, when synchronized, computes fn()
and behaves as the resulting event. This enables computing events with
side-effects at the time of the synchronization operation.
val
sync :
'a
event
->
'a
'Synchronize' on an event: offer all the communication possibilities specified in the event to the outside world, and block until one of the communications succeed. The result value of that communication is returned.
val
select :
'a
event
list``
->
'a
'Synchronize' on an alternative of events. select evl
is shorthand for
sync(choose evl)
.
val
poll :
'a
event
->
'a
option
Non-blocking version of Event.sync
: offer all the
communication possibilities specified in the event to the outside world,
and if one can take place immediately, perform it and return Some r
where r
is the result value of that communication. Otherwise, return
None
without blocking.