异步接口使用指南
异步接口使用指南
头文件:
wmpf/operation.h
。
SDK 的接口存在大量异步操作。如果看到一个函数的返回值类型为wx_operation_t
,则说明此函数是一个异步函数,需要在合适的时机调用如下任一函数以等待来异步执行的结果:
wx_operation_wait()
:同步阻塞式等待。支持设置超时时间。wx_operation_await()
:异步等待,不会阻塞当前线程。支持设置回调函数。
如果不关心异步操作的结果,可以调用如下函数释放wx_operation_t
对象。
wx_operation_destroy()
:主动销毁wx_operation_t
对象。异步操作会继续执行。
如果想取消一个异步操作,可以调用如下函数:
wx_operation_cancel()
:取消异步操作。
请特别注意wx_operation_t
对象的生命周期,以免造成内存泄漏:
- 调用
wx_operation_wait
或wx_operation_await
函数直至异步调用结束,那么wx_operation_t
对象会被自动回收。 - 如果调用
wx_operation_wait
超时,可以重新调用wx_operation_wait
函数以继续等待,或者调用wx_operation_cancel()
主动结束此次异步调用。cancel 后wx_operation_t
对象亦会被自动回收。 - 也可以手动调用
wx_operation_destroy()
销毁 operation 对象,这种情况下异步操作还会继续进行,但是将不会收到异步调用的结果。
1. 同步等待
同步阻塞当前线程,直到操作完成或超时。
-
如果操作完成(包括正常返回和接口异常的情况),
wx_operation_t
将被自动释放。 -
如果异步操作没有在指定时间内完成,返回
WXERROR_TIMEOUT
。可以有以下选择:
- 重新调用
wx_operation_wait()
继续等待; - 调用
wx_operation_cancel()
取消异步调用; - 调用
wx_operation_destroy()
销毁 operation 对象。
- 重新调用
wx_error_t wx_operation_wait(wx_operation_t operation, uint32_t timeout_ms);
参数
属性 | 类型 | 说明 |
---|---|---|
operation | wx_operation_t | 想要等待的 operation 对象 |
timeout_ms | uint32_t | 超时时间,单位毫秒。设置为 0 表示不超时。 |
返回值
wx_error_t
wait 的结果
错误码 | 说明 |
---|---|
WXERROR_OK | 接口调用正常完成,operation 对象会被自动释放。 |
WXERROR_TIMEOUT | operation 超时。 |
其他 | 接口调用异常返回错误,operation 对象会被自动释放。 |
2. 异步等待
异步等待,不会阻塞当前线程。异步操作的结果将通过 callback
函数通知。wx_operation_t
对象将会被自动释放。
void wx_operation_await(wx_operation_t operation,
wx_operation_callback_t callback,
void* user_data);
参数
属性 | 类型 | 说明 |
---|---|---|
operation | wx_operation_t | 想要等待的 operation 对象 |
callback | wx_operation_callback_t | 回调函数 |
user_data | void* | 想要在回调函数里接收的自定义数据。 |
3. 取消异步操作
取消异步操作,wx_operation_t
对象会被释放。调用该函数之后,不应该再对 wx_operation_t
对象执行任何操作。
wx_error_t wx_operation_cancel(wx_operation_t operation);
参数
属性 | 类型 | 说明 |
---|---|---|
operation | wx_operation_t | 想要取消的 operation 对象 |
返回值
wx_error_t
cancel 的结果
4. 释放对象
主动释放 wx_operation_t
对象,但不会取消异步操作本身。调用该函数之后,不应该再对 operation 对象执行任何操作。
- 如果没有对
wx_operation_t
对象调用 wait 或 cancel 函数,且不关心异步操作的结果,可以调用此函数手动释放wx_operation_t
对象。 - 当调用
wx_operation_wait()
函数返回WXERROR_TIMEOUT
,如果不希望继续等待,可以调用此函数来释放wx_operation_t
对象。 - 其他情况下
wx_operation_t
对象会被自动释放,不应该再调用此函数主动释放。
void wx_operation_destroy(wx_operation_t operation);
参数
属性 | 类型 | 说明 |
---|---|---|
operation | wx_operation_t | 想要释放的 operation 对象 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)