在 WebAssembly 中实现回调的方式

本文将介绍在 C++ 中实现 js 回调的几种方式. 在使用 wasm 的过程中, 避免不了要从 C++ 回调 js 的函数来实现异步交互.
官网文档 https://emscripten.org/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html#
中已经介绍了6种实现回调的方式, 这里介绍几种能解决实际问题的方式。
#EM_ASM 相关参数介绍
EM_ASM 函数簇包含

EM_ASM
EM_ASM_INT
EM_ASM_DOUBLE

类似的使用方式 :

EM_ASM_({
            postMessage({cmd: 'callback', text: "callback", threadId: $2, callId : $0, code : $1})
        }, callback, code, tid);

其中$0$1$2分别代表 callback, code, tid 的值.
后面两个函数还可以获取到 js 返回的 int/ double 值. 一般能满足简单的使用.
#如何在 worker 中实现回调
使用 wasm 的时候, 某些任务会被放到 worker 中执行, 执行完成后回调通知结果.

这个时候要特别注意: worker 和主线程是相互独立的, 并不能像普通的多线程可以共享进程内的数据. 在 worker 中调用 js 回调时, 第一个面临的限制就是 web worker 的限制:

  1. 不能访问 window, document 对象
  2. 与主线程通信需要通过 post message 方式
  3. 不能访问主进程中的全局变量会对象

如果直接在 worker 中直接调用回调, 就只能做一些简单的事情. 为此 emscripten 提供了以下函数:

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值