gpt4 book ai didi

javascript - 如何在 Web Worker 中使用 emscripted .js 库

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:01:03 25 4
gpt4 key购买 nike

我已将我的程序编译成单个 program.js 文件,并在 worker 中调用:

importScripts('program.js');
Module.callMain();

但是,虽然 callMain 正在执行,但在该函数调用的堆栈中我收到了 Undefined is not a function 错误。

我的直觉是我还没有阅读一些重要的 emscripten 文档、wiki 或源代码。

我所知道的:

  • emscripten 具有与 worker 一起工作的绑定(bind),但只有在主线程上有一个 emscripted 进程才能使用这些绑定(bind)时(参见 emscripten.h )
  • 为了将任务(在主线程上运行的库中)编译给 worker,emcc 需要在编译时为该任务传递特殊选项 (参见 settings.js )

我的推测:

  • 我可能需要传递一些标志,让 emcc 知道不要在不存在的对象上调用函数,例如 window
  • 查看了 /dev/tty 的实现,它由 /dev/stdin 链接,以及 /dev/stdout< 的实现,我相信可能会有输出到 console,我认为 worker 不支持它

我要问的是:

  • 如何在 worker 中使用我的库(单个 js 文件)?
    • 我的库从 program.data 文件加载其他文件,如果有差异的话

提前致谢。如果我可以添加任何详细信息,请告诉我。


注意:顶部的代码是简化的 - 它似乎不是语法错误。

更新:

  • 堆栈跟踪 (Error.stack) 仅告诉我错误发生在 Module.callMain 中。它没有告诉我有关可能导致它的导入脚本的任何信息。 :(

最佳答案

Emscripten 输出应该在网站、网络 worker 或节点上运行,所有这些都无需修改。可能会有一些限制(例如,没有 Canvas 可以在 worker 中渲染),但除此之外,它只是可以在这三种环境中运行的纯 JS。

emscripten 生成的完全相同的 JS 文件是否可以在 worker 之外工作?

如果 callMain() 失败,请检查您的项目是否具有 main() 函数。

关于javascript - 如何在 Web Worker 中使用 emscripted .js 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24968718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com