您可以使用 javascript 停止 WebAssembly 中当前的 运行 c++ 吗?
Can you use javascript to halt the currently running c++ in WebAssembly?
我用c++写了一个模拟,已经编译成wasm了。 javascript 使用 ccall 调用代码,这一切都发生在网络工作者中。一些 c++ 子例程采用 minutes/hours/days 到 运行。
有没有办法可以使用 javascript 告诉 WebAssembly 模块取消当前任务?我试过使用 stopWebAssembly() 函数:
void EMSCRIPTEN_KEEPALIVE stopWebAssembly(){
stop = true;
}
...
void simulate(){
State* state = new State();
while(!state->isTerminated() && !stop){
// Perform operation on state
}
}
目的是调用 stopWebAssembly() 将取消模拟。但这不起作用。还有什么我可以做的吗?我能想到的最好的办法是return在while循环的每1000次迭代后返回js,看看javascript是否请求停止,但这似乎效率低下且笨拙。
为了通过 JavaScript 设置您的“停止”变量,WebAssembly 将不得不执行 - 这意味着将您的长 运行 计算变成一系列小块可以执行。
将来您可以使用 SharedArrayBuffer 作为两者之间通信的方式,但这取决于 WebAssembly 中即将推出的线程支持。参见:
我用c++写了一个模拟,已经编译成wasm了。 javascript 使用 ccall 调用代码,这一切都发生在网络工作者中。一些 c++ 子例程采用 minutes/hours/days 到 运行。
有没有办法可以使用 javascript 告诉 WebAssembly 模块取消当前任务?我试过使用 stopWebAssembly() 函数:
void EMSCRIPTEN_KEEPALIVE stopWebAssembly(){
stop = true;
}
...
void simulate(){
State* state = new State();
while(!state->isTerminated() && !stop){
// Perform operation on state
}
}
目的是调用 stopWebAssembly() 将取消模拟。但这不起作用。还有什么我可以做的吗?我能想到的最好的办法是return在while循环的每1000次迭代后返回js,看看javascript是否请求停止,但这似乎效率低下且笨拙。
为了通过 JavaScript 设置您的“停止”变量,WebAssembly 将不得不执行 - 这意味着将您的长 运行 计算变成一系列小块可以执行。
将来您可以使用 SharedArrayBuffer 作为两者之间通信的方式,但这取决于 WebAssembly 中即将推出的线程支持。参见: