接口
GioAsyncResult
说明 [源代码]
interface Gio.AsyncResult : GObject.Object
GAsyncResult
为实现异步函数结果提供一个基本类。
异步操作分为两个独立的操作,这些操作通过 GAsyncReadyCallback
相互连接。要开始一项异步操作,请向异步函数提供一个 GAsyncReadyCallback
。当操作完成后会触发该回调,并且该回调必须在操作发起所在线程的默认主上下文的稍后迭代中运行(请参见 g_main_context_push_thread_default()
)。它会传入一个 GAsyncResult
实例,其中填入了该操作成功或失败的详细信息、为其启动异步函数的对象和返回的任何错误代码。然后预计异步回调函数会调用相应的 _finish()
函数,传入该函数被调用的对象、GAsyncResult
实例,以及(可选)获取可能发生的任何错误情况的 error
。
一项操作的 _finish()
函数获取通用结果(类型为 GAsyncResult
)并返回该操作产生的特定结果(例如,“枚举子项”操作的 GFileEnumerator
)。如果不需操作的结果或错误状态,则无需调用 _finish()
函数;在 GAsyncReadyCallback
返回后,GIO 将负责清理结果和错误信息。如果在操作完成后无需执行任何操作,则可以将 GAsyncReadyCallback
传递为 NULL
。应用程序还可以引用 GAsyncResult
并稍后调用 _finish()
;但是,_finish()
函数最多只能调用一次。
典型异步操作流程的示例
void _theoretical_frobnitz_async (Theoretical *t,
GCancellable *c,
GAsyncReadyCallback cb,
gpointer u);
gboolean _theoretical_frobnitz_finish (Theoretical *t,
GAsyncResult *res,
GError **e);
static void
frobnitz_result_func (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
gboolean success = FALSE;
success = _theoretical_frobnitz_finish (source_object, res, NULL);
if (success)
g_printf ("Hurray!\n");
else
g_printf ("Uh oh!\n");
...
}
int main (int argc, void *argv[])
{
...
_theoretical_frobnitz_async (theoretical_data,
NULL,
frobnitz_result_func,
NULL);
...
}
异步操作的回调只调用一次,并且总是调用,即使在已取消的操作中也会调用。在取消操作时,结果会是 G_IO_ERROR_CANCELLED
错误。
I/O 优先级
许多与 I/O 相关的异步操作都有一个优先级参数,在某些情况下,此参数用于确定执行操作的顺序。它们不用于确定系统范围内的 I/O 调度。优先级为整数,数字越低表示优先级越高。我们建议你选择介于 G_PRIORITY_LOW
和 G_PRIORITY_HIGH
之间的优先级,以 G_PRIORITY_DEFAULT
作为首选的默认值。
先决条件
为了实现 AsyncResult,你的类型必须从 GObject
继承。
实例方法
g_async_result_legacy_propagate_error
如果 res
是一个 GSimpleAsyncResult
,则这等效于 g_simple_async_result_propagate_error()
。否则,它返回 FALSE
。
since: 2.34
接口结构
struct GioAsyncResultIface {
GTypeInterface g_iface;
gpointer (* get_user_data) (
GAsyncResult* res
);
GObject* (* get_source_object) (
GAsyncResult* res
);
gboolean (* is_tagged) (
GAsyncResult* res,
gpointer source_tag
);
}
为 GAsyncResult
定义的接口。
接口成员
g_iface |
|
父接口。 |
|
get_user_data |
|
获取传递给回调函数的用户数据。 |
|
get_source_object |
|
获取发出异步操作的源对象。 |
|
is_tagged |
|
检查结果是否标记有特定的源。 |