2
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
4
<!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
5
<!ENTITY version SYSTEM "version.xml">
7
<refentry id="GAsyncInitable">
9
<refentrytitle role="top_of_page" id="GAsyncInitable.top_of_page">GAsyncInitable</refentrytitle>
10
<manvolnum>3</manvolnum>
11
<refmiscinfo>GIO Library</refmiscinfo>
15
<refname>GAsyncInitable</refname>
16
<refpurpose>Asynchronously failable object initialization interface</refpurpose>
19
<refsynopsisdiv id="GAsyncInitable.synopsis" role="synopsis">
20
<title role="synopsis.title">Synopsis</title>
24
#include <gio/gio.h>
26
<link linkend="GAsyncInitable-struct">GAsyncInitable</link>;
27
<link linkend="GAsyncInitableIface">GAsyncInitableIface</link>;
28
<link linkend="void">void</link> <link linkend="g-async-initable-init-async">g_async_initable_init_async</link> (<link linkend="GAsyncInitable">GAsyncInitable</link> *initable,
29
<link linkend="int">int</link> io_priority,
30
<link linkend="GCancellable">GCancellable</link> *cancellable,
31
<link linkend="GAsyncReadyCallback">GAsyncReadyCallback</link> callback,
32
<link linkend="gpointer">gpointer</link> user_data);
33
<link linkend="gboolean">gboolean</link> <link linkend="g-async-initable-init-finish">g_async_initable_init_finish</link> (<link linkend="GAsyncInitable">GAsyncInitable</link> *initable,
34
<link linkend="GAsyncResult">GAsyncResult</link> *res,
35
<link linkend="GError">GError</link> **error);
36
<link linkend="void">void</link> <link linkend="g-async-initable-new-async">g_async_initable_new_async</link> (<link linkend="GType">GType</link> object_type,
37
<link linkend="int">int</link> io_priority,
38
<link linkend="GCancellable">GCancellable</link> *cancellable,
39
<link linkend="GAsyncReadyCallback">GAsyncReadyCallback</link> callback,
40
<link linkend="gpointer">gpointer</link> user_data,
41
const <link linkend="gchar">gchar</link> *first_property_name,
43
<link linkend="GObject">GObject</link> * <link linkend="g-async-initable-new-finish">g_async_initable_new_finish</link> (<link linkend="GAsyncInitable">GAsyncInitable</link> *initable,
44
<link linkend="GAsyncResult">GAsyncResult</link> *res,
45
<link linkend="GError">GError</link> **error);
46
<link linkend="void">void</link> <link linkend="g-async-initable-new-valist-async">g_async_initable_new_valist_async</link> (<link linkend="GType">GType</link> object_type,
47
const <link linkend="gchar">gchar</link> *first_property_name,
48
<link linkend="va-list">va_list</link> var_args,
49
<link linkend="int">int</link> io_priority,
50
<link linkend="GCancellable">GCancellable</link> *cancellable,
51
<link linkend="GAsyncReadyCallback">GAsyncReadyCallback</link> callback,
52
<link linkend="gpointer">gpointer</link> user_data);
53
<link linkend="void">void</link> <link linkend="g-async-initable-newv-async">g_async_initable_newv_async</link> (<link linkend="GType">GType</link> object_type,
54
<link linkend="guint">guint</link> n_parameters,
55
<link linkend="GParameter">GParameter</link> *parameters,
56
<link linkend="int">int</link> io_priority,
57
<link linkend="GCancellable">GCancellable</link> *cancellable,
58
<link linkend="GAsyncReadyCallback">GAsyncReadyCallback</link> callback,
59
<link linkend="gpointer">gpointer</link> user_data);
63
<refsect1 id="GAsyncInitable.object-hierarchy" role="object_hierarchy">
64
<title role="object_hierarchy.title">Object Hierarchy</title>
66
<link linkend="GInterface">GInterface</link>
71
<refsect1 id="GAsyncInitable.prerequisites" role="prerequisites">
72
<title role="prerequisites.title">Prerequisites</title>
74
GAsyncInitable requires
75
<link linkend="GObject">GObject</link>.</para>
84
<refsect1 id="GAsyncInitable.description" role="desc">
85
<title role="desc.title">Description</title>
87
This is the asynchronous version of <link linkend="GInitable"><type>GInitable</type></link>; it behaves the same
88
in all ways except that initialization is asynchronous. For more details
89
see the descriptions on <link linkend="GInitable"><type>GInitable</type></link>.
92
A class may implement both the <link linkend="GInitable"><type>GInitable</type></link> and <link linkend="GAsyncInitable"><type>GAsyncInitable</type></link> interfaces.
95
Users of objects implementing this are not intended to use the interface
96
method directly; instead it will be used automatically in various ways.
97
For C applications you generally just call <link linkend="g-async-initable-new-async"><function>g_async_initable_new_async()</function></link>
98
directly, or indirectly via a <link linkend="foo-thing-new-async"><function>foo_thing_new_async()</function></link> wrapper. This will call
99
<link linkend="g-async-initable-init-async"><function>g_async_initable_init_async()</function></link> under the cover, calling back with <link linkend="NULL--CAPS"><literal>NULL</literal></link> and
100
a set <link linkend="GError"><literal>GError</literal></link> on failure.</para>
105
<refsect1 id="GAsyncInitable.details" role="details">
106
<title role="details.title">Details</title>
107
<refsect2 id="GAsyncInitable-struct" role="struct">
108
<title>GAsyncInitable</title>
109
<indexterm zone="GAsyncInitable-struct" role="2.22"><primary sortas="AsyncInitable">GAsyncInitable</primary></indexterm><programlisting>typedef struct _GAsyncInitable GAsyncInitable;</programlisting>
111
Interface for asynchronously initializable objects.</para>
113
</para><para role="since">Since 2.22</para></refsect2>
114
<refsect2 id="GAsyncInitableIface" role="struct" condition="since:2.22">
115
<title>GAsyncInitableIface</title>
116
<indexterm zone="GAsyncInitableIface" role="2.22"><primary sortas="AsyncInitableIface">GAsyncInitableIface</primary></indexterm><programlisting>typedef struct {
117
GTypeInterface g_iface;
121
void (* init_async) (GAsyncInitable *initable,
123
GCancellable *cancellable,
124
GAsyncReadyCallback callback,
126
gboolean (* init_finish) (GAsyncInitable *initable,
129
} GAsyncInitableIface;
132
Provides an interface for asynchronous initializing object such that
133
initialization may fail.</para>
135
</para><variablelist role="struct">
137
<term><link linkend="GTypeInterface">GTypeInterface</link> <structfield>g_iface</structfield>;</term>
138
<listitem><simpara> The parent interface.
139
</simpara></listitem>
142
<term><structfield>init_async</structfield> ()</term>
143
<listitem><simpara> Starts initialization of the object.
144
</simpara></listitem>
147
<term><structfield>init_finish</structfield> ()</term>
148
<listitem><simpara> Finishes initialization of the object.
149
</simpara></listitem>
151
</variablelist><para role="since">Since 2.22</para></refsect2>
152
<refsect2 id="g-async-initable-init-async" role="function" condition="since:2.22">
153
<title>g_async_initable_init_async ()</title>
154
<indexterm zone="g-async-initable-init-async" role="2.22"><primary sortas="async_initable_init_async">g_async_initable_init_async</primary></indexterm><programlisting><link linkend="void">void</link> g_async_initable_init_async (<link linkend="GAsyncInitable">GAsyncInitable</link> *initable,
155
<link linkend="int">int</link> io_priority,
156
<link linkend="GCancellable">GCancellable</link> *cancellable,
157
<link linkend="GAsyncReadyCallback">GAsyncReadyCallback</link> callback,
158
<link linkend="gpointer">gpointer</link> user_data);</programlisting>
160
Starts asynchronous initialization of the object implementing the
161
interface. This must be done before any real use of the object after
162
initial construction. If the object also implements <link linkend="GInitable"><type>GInitable</type></link> you can
163
optionally call <link linkend="g-initable-init"><function>g_initable_init()</function></link> instead.
166
When the initialization is finished, <parameter>callback</parameter> will be called. You can
167
then call <link linkend="g-async-initable-init-finish"><function>g_async_initable_init_finish()</function></link> to get the result of the
171
Implementations may also support cancellation. If <parameter>cancellable</parameter> is not
172
<link linkend="NULL--CAPS"><literal>NULL</literal></link>, then initialization can be cancelled by triggering the cancellable
173
object from another thread. If the operation was cancelled, the error
174
<link linkend="G-IO-ERROR-CANCELLED--CAPS"><literal>G_IO_ERROR_CANCELLED</literal></link> will be returned. If <parameter>cancellable</parameter> is not <link linkend="NULL--CAPS"><literal>NULL</literal></link>, and
175
the object doesn't support cancellable initialization, the error
176
<link linkend="G-IO-ERROR-NOT-SUPPORTED--CAPS"><literal>G_IO_ERROR_NOT_SUPPORTED</literal></link> will be returned.
179
If this function is not called, or returns with an error, then all
180
operations on the object should fail, generally returning the
181
error <link linkend="G-IO-ERROR-NOT-INITIALIZED--CAPS"><literal>G_IO_ERROR_NOT_INITIALIZED</literal></link>.
184
Implementations of this method must be idempotent: i.e. multiple calls
185
to this function with the same argument should return the same results.
186
Only the first call initializes the object; further calls return the result
187
of the first call. This is so that it's safe to implement the singleton
188
pattern in the GObject constructor function.
191
For classes that also support the <link linkend="GInitable"><type>GInitable</type></link> interface, the default
192
implementation of this method will run the <link linkend="g-initable-init"><function>g_initable_init()</function></link> function
193
in a thread, so if you want to support asynchronous initialization via
194
threads, just implement the <link linkend="GAsyncInitable"><type>GAsyncInitable</type></link> interface without overriding
195
any interface methods.</para>
197
</para><variablelist role="params">
198
<varlistentry><term><parameter>initable</parameter> :</term>
199
<listitem><simpara> a <link linkend="GAsyncInitable"><type>GAsyncInitable</type></link>.
200
</simpara></listitem></varlistentry>
201
<varlistentry><term><parameter>io_priority</parameter> :</term>
202
<listitem><simpara> the <link linkend="io-priority">I/O priority</link>
204
</simpara></listitem></varlistentry>
205
<varlistentry><term><parameter>cancellable</parameter> :</term>
206
<listitem><simpara> optional <link linkend="GCancellable"><type>GCancellable</type></link> object, <link linkend="NULL--CAPS"><literal>NULL</literal></link> to ignore.
207
</simpara></listitem></varlistentry>
208
<varlistentry><term><parameter>callback</parameter> :</term>
209
<listitem><simpara> a <link linkend="GAsyncReadyCallback"><type>GAsyncReadyCallback</type></link> to call when the request is satisfied
210
</simpara></listitem></varlistentry>
211
<varlistentry><term><parameter>user_data</parameter> :</term>
212
<listitem><simpara> the data to pass to callback function
213
</simpara></listitem></varlistentry>
214
</variablelist><para role="since">Since 2.22</para></refsect2>
215
<refsect2 id="g-async-initable-init-finish" role="function" condition="since:2.22">
216
<title>g_async_initable_init_finish ()</title>
217
<indexterm zone="g-async-initable-init-finish" role="2.22"><primary sortas="async_initable_init_finish">g_async_initable_init_finish</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> g_async_initable_init_finish (<link linkend="GAsyncInitable">GAsyncInitable</link> *initable,
218
<link linkend="GAsyncResult">GAsyncResult</link> *res,
219
<link linkend="GError">GError</link> **error);</programlisting>
221
Finishes asynchronous initialization and returns the result.
222
See <link linkend="g-async-initable-init-async"><function>g_async_initable_init_async()</function></link>.</para>
224
</para><variablelist role="params">
225
<varlistentry><term><parameter>initable</parameter> :</term>
226
<listitem><simpara> a <link linkend="GAsyncInitable"><type>GAsyncInitable</type></link>.
227
</simpara></listitem></varlistentry>
228
<varlistentry><term><parameter>res</parameter> :</term>
229
<listitem><simpara> a <link linkend="GAsyncResult"><type>GAsyncResult</type></link>.
230
</simpara></listitem></varlistentry>
231
<varlistentry><term><parameter>error</parameter> :</term>
232
<listitem><simpara> a <link linkend="GError"><type>GError</type></link> location to store the error occuring, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to
234
</simpara></listitem></varlistentry>
235
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> <link linkend="TRUE--CAPS"><literal>TRUE</literal></link> if successful. If an error has occurred, this function
236
will return <link linkend="FALSE--CAPS"><literal>FALSE</literal></link> and set <parameter>error</parameter> appropriately if present.
238
</simpara></listitem></varlistentry>
239
</variablelist><para role="since">Since 2.22</para></refsect2>
240
<refsect2 id="g-async-initable-new-async" role="function" condition="since:2.22">
241
<title>g_async_initable_new_async ()</title>
242
<indexterm zone="g-async-initable-new-async" role="2.22"><primary sortas="async_initable_new_async">g_async_initable_new_async</primary></indexterm><programlisting><link linkend="void">void</link> g_async_initable_new_async (<link linkend="GType">GType</link> object_type,
243
<link linkend="int">int</link> io_priority,
244
<link linkend="GCancellable">GCancellable</link> *cancellable,
245
<link linkend="GAsyncReadyCallback">GAsyncReadyCallback</link> callback,
246
<link linkend="gpointer">gpointer</link> user_data,
247
const <link linkend="gchar">gchar</link> *first_property_name,
248
...);</programlisting>
250
Helper function for constructing <link linkend="GAsyncInitiable"><type>GAsyncInitiable</type></link> object. This is
251
similar to <link linkend="g-object-new"><function>g_object_new()</function></link> but also initializes the object asynchronously.
254
When the initialization is finished, <parameter>callback</parameter> will be called. You can
255
then call <link linkend="g-async-initable-new-finish"><function>g_async_initable_new_finish()</function></link> to get the new object and check
256
for any errors.</para>
258
</para><variablelist role="params">
259
<varlistentry><term><parameter>object_type</parameter> :</term>
260
<listitem><simpara> a <link linkend="GType"><type>GType</type></link> supporting <link linkend="GAsyncInitable"><type>GAsyncInitable</type></link>.
261
</simpara></listitem></varlistentry>
262
<varlistentry><term><parameter>io_priority</parameter> :</term>
263
<listitem><simpara> the <link linkend="io-priority">I/O priority</link>
265
</simpara></listitem></varlistentry>
266
<varlistentry><term><parameter>cancellable</parameter> :</term>
267
<listitem><simpara> optional <link linkend="GCancellable"><type>GCancellable</type></link> object, <link linkend="NULL--CAPS"><literal>NULL</literal></link> to ignore.
268
</simpara></listitem></varlistentry>
269
<varlistentry><term><parameter>callback</parameter> :</term>
270
<listitem><simpara> a <link linkend="GAsyncReadyCallback"><type>GAsyncReadyCallback</type></link> to call when the initialization is
272
</simpara></listitem></varlistentry>
273
<varlistentry><term><parameter>user_data</parameter> :</term>
274
<listitem><simpara> the data to pass to callback function
275
</simpara></listitem></varlistentry>
276
<varlistentry><term><parameter>first_property_name</parameter> :</term>
277
<listitem><simpara> the name of the first property, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> if no
279
</simpara></listitem></varlistentry>
280
<varlistentry><term><parameter>...</parameter> :</term>
281
<listitem><simpara> the value of the first property, followed by other property
282
value pairs, and ended by <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
283
</simpara></listitem></varlistentry>
284
</variablelist><para role="since">Since 2.22</para></refsect2>
285
<refsect2 id="g-async-initable-new-finish" role="function" condition="since:2.22">
286
<title>g_async_initable_new_finish ()</title>
287
<indexterm zone="g-async-initable-new-finish" role="2.22"><primary sortas="async_initable_new_finish">g_async_initable_new_finish</primary></indexterm><programlisting><link linkend="GObject">GObject</link> * g_async_initable_new_finish (<link linkend="GAsyncInitable">GAsyncInitable</link> *initable,
288
<link linkend="GAsyncResult">GAsyncResult</link> *res,
289
<link linkend="GError">GError</link> **error);</programlisting>
291
Finishes the async construction for the various g_async_initable_new calls,
292
returning the created object or <link linkend="NULL--CAPS"><literal>NULL</literal></link> on error.</para>
294
</para><variablelist role="params">
295
<varlistentry><term><parameter>initable</parameter> :</term>
296
<listitem><simpara> the <link linkend="GAsyncInitable"><type>GAsyncInitable</type></link> from the callback
297
</simpara></listitem></varlistentry>
298
<varlistentry><term><parameter>res</parameter> :</term>
299
<listitem><simpara> the <link linkend="GAsyncResult"><type>GAsyncResult</type></link>.from the callback
300
</simpara></listitem></varlistentry>
301
<varlistentry><term><parameter>error</parameter> :</term>
302
<listitem><simpara> a <link linkend="GError"><type>GError</type></link> location to store the error occuring, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> to
304
</simpara></listitem></varlistentry>
305
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> a newly created <link linkend="GObject"><type>GObject</type></link>, or <link linkend="NULL--CAPS"><literal>NULL</literal></link> on error. Free with
306
<link linkend="g-object-unref"><function>g_object_unref()</function></link>.
308
</simpara></listitem></varlistentry>
309
</variablelist><para role="since">Since 2.22</para></refsect2>
310
<refsect2 id="g-async-initable-new-valist-async" role="function" condition="since:2.22">
311
<title>g_async_initable_new_valist_async ()</title>
312
<indexterm zone="g-async-initable-new-valist-async" role="2.22"><primary sortas="async_initable_new_valist_async">g_async_initable_new_valist_async</primary></indexterm><programlisting><link linkend="void">void</link> g_async_initable_new_valist_async (<link linkend="GType">GType</link> object_type,
313
const <link linkend="gchar">gchar</link> *first_property_name,
314
<link linkend="va-list">va_list</link> var_args,
315
<link linkend="int">int</link> io_priority,
316
<link linkend="GCancellable">GCancellable</link> *cancellable,
317
<link linkend="GAsyncReadyCallback">GAsyncReadyCallback</link> callback,
318
<link linkend="gpointer">gpointer</link> user_data);</programlisting>
320
Helper function for constructing <link linkend="GAsyncInitiable"><type>GAsyncInitiable</type></link> object. This is
321
similar to <link linkend="g-object-new-valist"><function>g_object_new_valist()</function></link> but also initializes the object
325
When the initialization is finished, <parameter>callback</parameter> will be called. You can
326
then call <link linkend="g-async-initable-new-finish"><function>g_async_initable_new_finish()</function></link> to get the new object and check
327
for any errors.</para>
329
</para><variablelist role="params">
330
<varlistentry><term><parameter>object_type</parameter> :</term>
331
<listitem><simpara> a <link linkend="GType"><type>GType</type></link> supporting <link linkend="GAsyncInitable"><type>GAsyncInitable</type></link>.
332
</simpara></listitem></varlistentry>
333
<varlistentry><term><parameter>first_property_name</parameter> :</term>
334
<listitem><simpara> the name of the first property, followed by
335
the value, and other property value pairs, and ended by <link linkend="NULL--CAPS"><literal>NULL</literal></link>.
336
</simpara></listitem></varlistentry>
337
<varlistentry><term><parameter>var_args</parameter> :</term>
338
<listitem><simpara> The var args list generated from <parameter>first_property_name</parameter>.
339
</simpara></listitem></varlistentry>
340
<varlistentry><term><parameter>io_priority</parameter> :</term>
341
<listitem><simpara> the <link linkend="io-priority">I/O priority</link>
343
</simpara></listitem></varlistentry>
344
<varlistentry><term><parameter>cancellable</parameter> :</term>
345
<listitem><simpara> optional <link linkend="GCancellable"><type>GCancellable</type></link> object, <link linkend="NULL--CAPS"><literal>NULL</literal></link> to ignore.
346
</simpara></listitem></varlistentry>
347
<varlistentry><term><parameter>callback</parameter> :</term>
348
<listitem><simpara> a <link linkend="GAsyncReadyCallback"><type>GAsyncReadyCallback</type></link> to call when the initialization is
350
</simpara></listitem></varlistentry>
351
<varlistentry><term><parameter>user_data</parameter> :</term>
352
<listitem><simpara> the data to pass to callback function
353
</simpara></listitem></varlistentry>
354
</variablelist><para role="since">Since 2.22</para></refsect2>
355
<refsect2 id="g-async-initable-newv-async" role="function" condition="since:2.22">
356
<title>g_async_initable_newv_async ()</title>
357
<indexterm zone="g-async-initable-newv-async" role="2.22"><primary sortas="async_initable_newv_async">g_async_initable_newv_async</primary></indexterm><programlisting><link linkend="void">void</link> g_async_initable_newv_async (<link linkend="GType">GType</link> object_type,
358
<link linkend="guint">guint</link> n_parameters,
359
<link linkend="GParameter">GParameter</link> *parameters,
360
<link linkend="int">int</link> io_priority,
361
<link linkend="GCancellable">GCancellable</link> *cancellable,
362
<link linkend="GAsyncReadyCallback">GAsyncReadyCallback</link> callback,
363
<link linkend="gpointer">gpointer</link> user_data);</programlisting>
365
Helper function for constructing <link linkend="GAsyncInitiable"><type>GAsyncInitiable</type></link> object. This is
366
similar to <link linkend="g-object-newv"><function>g_object_newv()</function></link> but also initializes the object asynchronously.
369
When the initialization is finished, <parameter>callback</parameter> will be called. You can
370
then call <link linkend="g-async-initable-new-finish"><function>g_async_initable_new_finish()</function></link> to get the new object and check
371
for any errors.</para>
373
</para><variablelist role="params">
374
<varlistentry><term><parameter>object_type</parameter> :</term>
375
<listitem><simpara> a <link linkend="GType"><type>GType</type></link> supporting <link linkend="GAsyncInitable"><type>GAsyncInitable</type></link>.
376
</simpara></listitem></varlistentry>
377
<varlistentry><term><parameter>n_parameters</parameter> :</term>
378
<listitem><simpara> the number of parameters in <parameter>parameters</parameter>
379
</simpara></listitem></varlistentry>
380
<varlistentry><term><parameter>parameters</parameter> :</term>
381
<listitem><simpara> the parameters to use to construct the object
382
</simpara></listitem></varlistentry>
383
<varlistentry><term><parameter>io_priority</parameter> :</term>
384
<listitem><simpara> the <link linkend="io-priority">I/O priority</link>
386
</simpara></listitem></varlistentry>
387
<varlistentry><term><parameter>cancellable</parameter> :</term>
388
<listitem><simpara> optional <link linkend="GCancellable"><type>GCancellable</type></link> object, <link linkend="NULL--CAPS"><literal>NULL</literal></link> to ignore.
389
</simpara></listitem></varlistentry>
390
<varlistentry><term><parameter>callback</parameter> :</term>
391
<listitem><simpara> a <link linkend="GAsyncReadyCallback"><type>GAsyncReadyCallback</type></link> to call when the initialization is
393
</simpara></listitem></varlistentry>
394
<varlistentry><term><parameter>user_data</parameter> :</term>
395
<listitem><simpara> the data to pass to callback function
396
</simpara></listitem></varlistentry>
397
</variablelist><para role="since">Since 2.22</para></refsect2>
403
<refsect1 id="GAsyncInitable.see-also">
404
<title>See Also</title>