File: asyncprocess.xml

package info (click to toggle)
lazarus 4.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 275,760 kB
  • sloc: pascal: 2,341,904; xml: 509,420; makefile: 348,726; cpp: 93,608; sh: 3,387; java: 609; perl: 297; sql: 222; ansic: 137
file content (372 lines) | stat: -rw-r--r-- 11,968 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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
<?xml version="1.0" encoding="UTF-8"?>
<!--

Documentation for LCL (Lazarus Component Library) and LazUtils (Lazarus 
Utilities) are published under the Creative Commons Attribution-ShareAlike 4.0 
International public license.

https://creativecommons.org/licenses/by-sa/4.0/legalcode.txt
https://gitlab.com/freepascal.org/lazarus/lazarus/-/blob/main/docs/cc-by-sa-4-0.txt

Copyright (c) 1997-2025, by the Lazarus Development Team.

-->
<fpdoc-descriptions>
<package name="lcl">
<!--
====================================================================
AsyncProcess
====================================================================
-->
<module name="AsyncProcess">
<short>
Implements a process with asynchronous event notifications.
</short>
<descr>
<p>
<file>asyncprocess.pp</file> implements a process with asynchronous event 
notifications for data availability and process termination. The following 
components are added to the Lazarus IDE component palette:
</p>
<p>
<b>System</b> Tab
</p>
<ul>
<li>TAsyncProcess</li>
</ul>
<p>
<file>asynprocess.pp</file> is part of the Lazarus Component Library (LCL).
</p>
</descr>

<!-- unresolved references -->
<element name="Classes"/>
<element name="Process"/>
<element name="FileUtil"/>
<element name="UTF8Process"/>
<element name="InterfaceBase"/>
<element name="LCLIntf"/>

<element name="TAsyncProcess">
<short>
Implements a process with asynchronous notifications for data and termination.
</short>
<descr>
<p>
<var>TAsyncProcess</var> is a <var>TProcessUTF8</var> descendant which 
implements support for asynchronous notifications when data is available for 
the process. Internally, TAsyncProcess uses pipe and process handlers to 
detect when data is written to the <var>Output</var> handle, and when the 
process is terminated. TAsyncProcess provides <var>OnReadData</var> and 
<var>OnTerminate</var> event handlers signalled for the corresponding 
asynchronous notifications.
</p>
</descr>
<seealso>
<link id="TAsyncProcess.OnReadData"/>
<link id="TAsyncProcess.OnTerminate"/>
<link id="#lazutils.utf8process.TProcessUTF8">TProcessUTF8</link>
<link id="#fcl.process.TProcess.Output">TProcess.Output</link>
</seealso>
</element>

<element name="TAsyncProcess.FPipeHandler"/>
<element name="TAsyncProcess.FProcessHandler"/>
<element name="TAsyncProcess.FOnReadData"/>
<element name="TAsyncProcess.FOnTerminate"/>

<element name="TAsyncProcess.GetNumBytesAvailable">
<short>
Gets the value for the NumBytesAvailable property.
</short>
<descr>
<p>
<var>GetNumBytesAvailable</var> is a <var>dword</var> function used to get 
the value for the <var>NumBytesAvailable</var> property. The return value 
contains the value from <var>Output.NumBytesAvailable</var>, or 0 (zero) when 
<var>Options</var> does not include the value <var>poUsePipes</var>.
</p>
<p>
Use <var>NumBytesAvailable</var> to access the value for the property.
</p>
<p>
Use <var>Options</var> to specify the process options enabled for the class 
instance.
</p>
</descr>
<seealso>
<link id="TAsyncProcess.NumBytesAvailable"/>
<link id="TAsyncProcess.GetNumBytesAvailable"/>
<link id="#fcl.process.TProcess.Options">TProcess.Options</link>
</seealso>
</element>
<element name="TAsyncProcess.GetNumBytesAvailable.Result">
<short>Value for the property.</short>
</element>

<element name="TAsyncProcess.HandlePipeInput">
<short>
Implements asynchronous notifications during execution of the process.
</short>
<descr>
<p>
<var>HandlePipeInput</var> is a procedure which implements support for 
asynchronous notifications which occur during execution of the process. 
HandlePipeInput is assigned using <var>AddPipeEventHandler</var> when 
<var>Execute</var> is called.
</p>
<p>
HandlePipeInput examines values in <var>AReasons</var> to determine the 
action for the notification. When AReasons includes the value 
<var>prBroken</var>, the pipe has been closed and <var>UnhookPipeHandle</var> 
is called. When <var>prDataAvailable</var> is included in AReasons, the 
<var>OnReadData</var> event handler is signalled (when assigned).
</p>
<p>
Use <var>OnReadData</var> to respond to arrival of data on the handle for the 
process. Use <var>NumBytesAvailable</var> is determine the number of bytes 
available.
</p>
</descr>
<seealso>
<link id="TAsyncProcess.OnReadData"/>
<link id="TAsyncProcess.NumBytesAvailable"/>
</seealso>
</element>
<element name="TAsyncProcess.HandlePipeInput.AData">
<short>Data available on the input handle.</short>
</element>
<element name="TAsyncProcess.HandlePipeInput.AReasons">
<short>Reason the data was written for the handler.</short>
</element>

<element name="TAsyncProcess.HandleProcessTermination">
<short>
Performs actions needed when the process is terminated.
</short>
<descr>
<p>
<var>HandleProcessTermination</var> is a procedure which performs actions 
needed when the process is terminated. HandleProcessTermination is assigned 
using <var>AddProcessEventHandler</var> when <var>Execute</var> is called.
</p>
<p>
HandleProcessTermination calls <var>UnhookProcessHandle</var> and 
<var>UnhookPipeHandle</var> to release the handlers in the class instance. 
HandleProcessTermination signals the <var>OnTerminate</var> event handler 
when it has been assigned.
</p>
</descr>
<seealso>
<link id="TAsyncProcess.Execute"/>
<link id="TAsyncProcess.UnhookProcessHandle"/>
<link id="TAsyncProcess.UnhookPipeHandle"/>
<link id="TAsyncProcess.OnTerminate"/>
</seealso>
</element>
<element name="TAsyncProcess.HandleProcessTermination.AData">
<short>Data for the process notification.</short>
</element>
<element name="TAsyncProcess.HandleProcessTermination.AReason">
<short>Reason(s) for the process notification.</short>
</element>
<element name="TAsyncProcess.HandleProcessTermination.AInfo">
<short>Process exit code.</short>
</element>

<element name="TAsyncProcess.UnhookPipeHandle">
<short>
Removes the pipe handler assigned for the process.
</short>
<descr>
<p>
<var>UnhookPipeHandle</var> is a procedure used to remove the pipe handler 
assigned for the process in the <var>Execute</var> method. UnhookPipeHandle 
calls <var>RemovePipeEventHandler</var> when a pipe handler has been assigned.
</p>
<p>
<var>UnhookPipeHandle</var> is called from the <var>Destroy</var> method, and 
from <var>HandlePipeInput</var> when the <var>prBroken</var> flag is found in 
the parameters passed to the method.
</p>
</descr>
<seealso>
<link id="TAsyncProcess.Execute"/>
<link id="#lcl.interfacebase.TPipeReason">TPipeReason</link>
</seealso>
</element>

<element name="TAsyncProcess.UnhookProcessHandle">
<short>
Removes the process handler assigned for the process.
</short>
<descr>
<p>
<var>UnhookProcessHandle</var> is a procedure used to remove the process 
handler assigned for the process in the <var>Execute</var> method. 
UnhookProcessHandle calls <var>RemoveProcessEventHandler</var> when a process 
handler has been assigned.
</p>
<p>
<var>UnhookProcessHandle</var> is called from the 
<var>HandleProcessTermination</var> and <var>Destroy</var> methods.
</p>
</descr>
<seealso>
<link id="TAsyncProcess.Execute"/>
<link id="TAsyncProcess.HandleProcessTermination"/>
<link id="TAsyncProcess.Destroy"/>
</seealso>
</element>

<element name="TAsyncProcess.Execute">
<short>
Executes the process.
</short>
<descr>
<p>
<var>Execute</var> is an overridden procedure used to execute the process. 
Execute calls the inherited Execute method on entry.
</p>
<p>
Execute uses values in <var>Options</var> to determine if a process or a pipe 
handler is needed for the class instance. When Options includes the value 
<var>poUsePipes</var>, <var>AddPipeEventHandler</var> is called using 
<var>HandlePipeInput</var> as the pipe handler routine. Set the values in 
Options prior to calling the Execute method.
</p>
<p>
Execute calls <var>AddProcessEventHandler</var> using 
<var>HandleProcessTermination</var> as the process handler routine.
</p>
</descr>
<seealso>
<link id="TAsyncProcess.HandlePipeInput"/>
<link id="TAsyncProcess.HandleProcessTermination"/>
<link id="#fcl.process.TProcess.Options">TProcess.Options</link>
</seealso>
</element>

<element name="TAsyncProcess.Destroy">
<short>
Destructor for the class instance.
</short>
<descr>
<p>
<var>Destroy</var> is the overridden destructor for the class instance. 
Destroy calls <var>UnhookProcessHandle</var> and <var>UnhookPipeHandle</var> 
to remove the handler(s) for the class instance. Destroy calls the inherited 
method to free resources allocated in the class instance and perform free 
notifications.
</p>
</descr>
<seealso>
<link id="TAsyncProcess.UnhookProcessHandle"/>
<link id="TAsyncProcess.UnhookPipeHandle"/>
<link id="#fcl.process.TProcess.Destroy">TProcess.Destroy</link>
</seealso>
</element>

<element name="TAsyncProcess.NumBytesAvailable">
<short>
Number of output bytes available from the process.
</short>
<descr>
<p>
<var>NumBytesAvailable</var> is a read-only <var>dword</var> property that 
indicates the number of bytes available on the <var>Output</var> handle for 
the process. <var>GetNumBytesAvailable</var> is the read access specifier for 
the property value. NumBytesAvailable contains the value in 
Output.NumBytesAvailable, or 0 (zero) when <var>Options</var> does not 
contain the value <var>poUsePipes</var>.
</p>
<p>
Set the values for the <var>Options</var> property prior to calling 
<var>Execute</var>.
</p>
<p>
Use <var>OnReadData</var> to respond to the process notification signalled 
when data is available.
</p>
</descr>
<seealso>
<link id="TAsyncProcess.Execute"/>
<link id="TAsyncProcess.OnReadData"/>
<link id="#fcl.process.TProcess.Options">TProcess.Options</link>
<link id="#fcl.process.TProcess.Output">TProcess.Output</link>
</seealso>
</element>

<element name="TAsyncProcess.OnReadData">
<short>
Event handler signalled when output data is available for the process.
</short>
<descr>
<p>
<var>OnReadData</var> is a <var>TNotifyEvent</var> property that implements 
the event handler signalled when data is available for the process. 
Applications should assign a procedure to the event handler that responds to 
the pipe notification. The procedure must handle all data available on the 
<var>Output</var> handle up to the number of bytes in 
<var>NumBytesAvailable</var>. All available data must be handled, or the 
procedure will be called repeatedly until no more data is available.
</p>
<p>
OnReadData is signalled (when assigned) from the <var>HandlePipeInput</var> 
method when the <var>prDataAvailable</var> flag is found in the parameters 
passed to the method.
</p>
</descr>
<seealso>
<link id="TAsyncProcess.NumBytesAvailable"/>
<link id="#lcl.interfacebase.TPipeReason">TPipeReason</link>
<link id="#fcl.process.TProcess.Output">TProcess.Output</link>
<link id="#rtl.classes.TNotifyEvent">TNotifyEvent</link>
</seealso>
</element>

<element name="TAsyncProcess.OnTerminate">
<short>
Event handler signalled when the process is terminated.
</short>
<descr>
<p>
<var>OnTerminate</var> is a <var>TNotifyEvent</var> property that implements 
the event handler signalled when the process is terminated. Applications can 
assign a procedure to the event handler to perform actions needed when the 
process is terminated.
</p>
<p>
OnTerminate is signalled (when assigned) from the 
<var>HandleProcessTermination</var> method, and occurs after the process and 
pipe handlers have been unhooked in the class instance.
</p>
</descr>
<seealso>
<link id="TAsyncProcess.HandleProcessTermination"/>
<link id="#rtl.classes.TNotifyEvent">TNotifyEvent</link>
</seealso>
</element>

<element name="Register">
<short>Registers components for use in the Lazarus IDE.</short>
<descr>
<p>
<var>Register</var> is the procedure used to register components for use in 
the Lazarus IDE. The following components are added to the Lazarus IDE 
component palette:
</p>
<p>
<b>System</b> Tab
</p>
<ul>
<li>TAsyncProcess</li>
</ul>
</descr>
<seealso/>
</element>

</module>
<!-- AsyncProcess -->
</package>
</fpdoc-descriptions>