你能用javascript来停止WebAssembly中当前运行的c++吗?



我用 c++ 编写了一个模拟,这已经被编译为 wasm。代码是由javascript使用ccall调用的,这一切都发生在Web工作者中。某些 c++ 子例程需要几分钟/几小时/几天才能运行。

有没有办法使用 javascript 告诉 WebAssembly 模块取消当前任务?我尝试使用stopWebAssembly((函数:

    void EMSCRIPTEN_KEEPALIVE stopWebAssembly(){
        stop = true;
    }
    ...
    void simulate(){
        State* state = new State();
        while(!state->isTerminated() && !stop){
            // Perform operation on state
        }
    }

目的是调用 stopWebAssembly(( 将取消模拟。但这行不通。我还能做些什么吗?我能想到的最好的方法是在 while 循环的每千次左右迭代后返回 js,看看 javascript 是否请求停止,但这似乎效率低下且笨拙。

为了通过JavaScript设置"stop"变量,WebAssembly必须产生执行 - 这意味着将长时间运行的计算转换为一系列可以执行的小块。

将来,您可以使用 SharedArrayBuffer 作为两者之间通信的一种方式,但这取决于 WebAssembly 中即将推出的线程支持。看:

https://github.com/WebAssembly/design/issues/950

相关内容

  • 没有找到相关文章

最新更新