File: Event.html

package info (click to toggle)
ocaml-doc 3.09-1
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 10,428 kB
  • ctags: 4,963
  • sloc: ml: 9,244; makefile: 2,413; ansic: 122; sh: 49; asm: 17
file content (151 lines) | stat: -rw-r--r-- 9,918 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<html>
<head>
<link rel="stylesheet" href="style.css" type="text/css">
<link rel="Start" href="index.html">
<link rel="previous" href="Dynlink.html">
<link rel="next" href="Filename.html">
<link rel="Up" href="index.html">
<link title="Index of types" rel=Appendix href="index_types.html">
<link title="Index of exceptions" rel=Appendix href="index_exceptions.html">
<link title="Index of values" rel=Appendix href="index_values.html">
<link title="Index of modules" rel=Appendix href="index_modules.html">
<link title="Index of module types" rel=Appendix href="index_module_types.html">
<link title="Arg" rel="Chapter" href="Arg.html">
<link title="Arith_status" rel="Chapter" href="Arith_status.html">
<link title="Array" rel="Chapter" href="Array.html">
<link title="ArrayLabels" rel="Chapter" href="ArrayLabels.html">
<link title="Big_int" rel="Chapter" href="Big_int.html">
<link title="Bigarray" rel="Chapter" href="Bigarray.html">
<link title="Buffer" rel="Chapter" href="Buffer.html">
<link title="Callback" rel="Chapter" href="Callback.html">
<link title="CamlinternalMod" rel="Chapter" href="CamlinternalMod.html">
<link title="CamlinternalOO" rel="Chapter" href="CamlinternalOO.html">
<link title="Char" rel="Chapter" href="Char.html">
<link title="Complex" rel="Chapter" href="Complex.html">
<link title="Condition" rel="Chapter" href="Condition.html">
<link title="Dbm" rel="Chapter" href="Dbm.html">
<link title="Digest" rel="Chapter" href="Digest.html">
<link title="Dynlink" rel="Chapter" href="Dynlink.html">
<link title="Event" rel="Chapter" href="Event.html">
<link title="Filename" rel="Chapter" href="Filename.html">
<link title="Format" rel="Chapter" href="Format.html">
<link title="Gc" rel="Chapter" href="Gc.html">
<link title="Genlex" rel="Chapter" href="Genlex.html">
<link title="Graphics" rel="Chapter" href="Graphics.html">
<link title="GraphicsX11" rel="Chapter" href="GraphicsX11.html">
<link title="Hashtbl" rel="Chapter" href="Hashtbl.html">
<link title="Int32" rel="Chapter" href="Int32.html">
<link title="Int64" rel="Chapter" href="Int64.html">
<link title="Lazy" rel="Chapter" href="Lazy.html">
<link title="Lexing" rel="Chapter" href="Lexing.html">
<link title="List" rel="Chapter" href="List.html">
<link title="ListLabels" rel="Chapter" href="ListLabels.html">
<link title="Map" rel="Chapter" href="Map.html">
<link title="Marshal" rel="Chapter" href="Marshal.html">
<link title="MoreLabels" rel="Chapter" href="MoreLabels.html">
<link title="Mutex" rel="Chapter" href="Mutex.html">
<link title="Nativeint" rel="Chapter" href="Nativeint.html">
<link title="Num" rel="Chapter" href="Num.html">
<link title="Obj" rel="Chapter" href="Obj.html">
<link title="Oo" rel="Chapter" href="Oo.html">
<link title="Parsing" rel="Chapter" href="Parsing.html">
<link title="Pervasives" rel="Chapter" href="Pervasives.html">
<link title="Printexc" rel="Chapter" href="Printexc.html">
<link title="Printf" rel="Chapter" href="Printf.html">
<link title="Queue" rel="Chapter" href="Queue.html">
<link title="Random" rel="Chapter" href="Random.html">
<link title="Scanf" rel="Chapter" href="Scanf.html">
<link title="Set" rel="Chapter" href="Set.html">
<link title="Sort" rel="Chapter" href="Sort.html">
<link title="Stack" rel="Chapter" href="Stack.html">
<link title="StdLabels" rel="Chapter" href="StdLabels.html">
<link title="Str" rel="Chapter" href="Str.html">
<link title="Stream" rel="Chapter" href="Stream.html">
<link title="String" rel="Chapter" href="String.html">
<link title="StringLabels" rel="Chapter" href="StringLabels.html">
<link title="Sys" rel="Chapter" href="Sys.html">
<link title="Thread" rel="Chapter" href="Thread.html">
<link title="ThreadUnix" rel="Chapter" href="ThreadUnix.html">
<link title="Unix" rel="Chapter" href="Unix.html">
<link title="UnixLabels" rel="Chapter" href="UnixLabels.html">
<link title="Weak" rel="Chapter" href="Weak.html"><title>Event</title>
</head>
<body>
<div class="navbar"><a href="Dynlink.html">Previous</a>
&nbsp;<a href="index.html">Up</a>
&nbsp;<a href="Filename.html">Next</a>
</div>
<center><h1>Module <a href="type_Event.html">Event</a></h1></center>
<br>
<pre><span class="keyword">module</span> Event: <code class="code"><span class="keyword">sig</span></code> <a href="Event.html">..</a> <code class="code"><span class="keyword">end</span></code></pre>First-class synchronous communication.
<p>

   This module implements synchronous inter-thread communications over
   channels. As in John Reppy's Concurrent ML system, the communication 
   events are first-class values: they can be built and combined
   independently before being offered for communication.<br>
<hr width="100%">
<pre><span class="keyword">type</span> <a name="TYPEchannel"></a><code class="type">'a</code> channel </pre>
<div class="info">
The type of communication channels carrying values of type <code class="code"><span class="keywordsign">'</span>a</code>.<br>
</div>

<pre><span class="keyword">val</span> <a name="VALnew_channel"></a>new_channel : <code class="type">unit -> 'a <a href="Event.html#TYPEchannel">channel</a></code></pre><div class="info">
Return a new channel.<br>
</div>
<pre><span class="keyword">type</span> <a name="TYPEevent"></a><code class="type">'a</code> event </pre>
<div class="info">
The type of communication events returning a result of type <code class="code"><span class="keywordsign">'</span>a</code>.<br>
</div>

<pre><span class="keyword">val</span> <a name="VALsend"></a>send : <code class="type">'a <a href="Event.html#TYPEchannel">channel</a> -> 'a -> unit <a href="Event.html#TYPEevent">event</a></code></pre><div class="info">
<code class="code">send ch v</code> returns the event consisting in sending the value <code class="code">v</code>
   over the channel <code class="code">ch</code>. The result value of this event is <code class="code">()</code>.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALreceive"></a>receive : <code class="type">'a <a href="Event.html#TYPEchannel">channel</a> -> 'a <a href="Event.html#TYPEevent">event</a></code></pre><div class="info">
<code class="code">receive ch</code> returns the event consisting in receiving a value
   from the channel <code class="code">ch</code>. The result value of this event is the
   value received.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALalways"></a>always : <code class="type">'a -> 'a <a href="Event.html#TYPEevent">event</a></code></pre><div class="info">
<code class="code">always v</code> returns an event that is always ready for
   synchronization.  The result value of this event is <code class="code">v</code>.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALchoose"></a>choose : <code class="type">'a <a href="Event.html#TYPEevent">event</a> list -> 'a <a href="Event.html#TYPEevent">event</a></code></pre><div class="info">
<code class="code">choose evl</code> returns the event that is the alternative of
   all the events in the list <code class="code">evl</code>.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrap"></a>wrap : <code class="type">'a <a href="Event.html#TYPEevent">event</a> -> ('a -> 'b) -> 'b <a href="Event.html#TYPEevent">event</a></code></pre><div class="info">
<code class="code">wrap ev fn</code> returns the event that performs the same communications
   as <code class="code">ev</code>, then applies the post-processing function <code class="code">fn</code>
   on the return value.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALwrap_abort"></a>wrap_abort : <code class="type">'a <a href="Event.html#TYPEevent">event</a> -> (unit -> unit) -> 'a <a href="Event.html#TYPEevent">event</a></code></pre><div class="info">
<code class="code">wrap_abort ev fn</code> returns the event that performs
   the same communications as <code class="code">ev</code>, but if it is not selected
   the function <code class="code">fn</code> is called after the synchronization.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALguard"></a>guard : <code class="type">(unit -> 'a <a href="Event.html#TYPEevent">event</a>) -> 'a <a href="Event.html#TYPEevent">event</a></code></pre><div class="info">
<code class="code">guard fn</code> returns the event that, when synchronized, computes
   <code class="code">fn()</code> and behaves as the resulting event. This allows to
   compute events with side-effects at the time of the synchronization
   operation.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALsync"></a>sync : <code class="type">'a <a href="Event.html#TYPEevent">event</a> -> 'a</code></pre><div class="info">
``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.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALselect"></a>select : <code class="type">'a <a href="Event.html#TYPEevent">event</a> list -> 'a</code></pre><div class="info">
``Synchronize'' on an alternative of events.
   <code class="code">select evl</code> is shorthand for <code class="code">sync(choose evl)</code>.<br>
</div>
<pre><span class="keyword">val</span> <a name="VALpoll"></a>poll : <code class="type">'a <a href="Event.html#TYPEevent">event</a> -> 'a option</code></pre><div class="info">
Non-blocking version of <a href="Event.html#VALsync"><code class="code"><span class="constructor">Event</span>.sync</code></a>: offer all the communication 
   possibilities specified in the event to the outside world,
   and if one can take place immediately, perform it and return
   <code class="code"><span class="constructor">Some</span> r</code> where <code class="code">r</code> is the result value of that communication.
   Otherwise, return <code class="code"><span class="constructor">None</span></code> without blocking.<br>
</div>
</body></html>