在 emscripten 网页汇编正在运行期间更新进度条?
Update progress bar during emscripten webassembly is running?
我想在emscripten网页程序集运行时显示进度条。但是进度条在网络组装完成后更新。有没有办法中断 webassembly (主线程(,然后继续或强制 javascript(主线程(渲染 GUI?
主.js
Module.cwrap('calc', 'undefined', [])();
计算.cpp
void calc() {
EM_ASM({ progressBar($0); }, value); // here the progress bar should be updated immedately
...
calc something
...
}
// but it's updated only here
我也试过了
progressbar(val) {
setTimeout(function(){ updateBar(val); }, 0);
}
不幸的是,对我来说,不可能在单独的文件中使用 Web Worker 。 谢谢。。。
遗憾的是,无法强制呈现 UI。我不知道是否有可能打断wasm,但这里有一个替代的想法。
请考虑将计算分散到一段时间内,并为主线程(和事件循环(提供一些"喘息空间"来更新 UI。
假设您正在计算一个总和,总共需要花费大量时间。您可以拆分计算,以便一次计算一部分总和:
var sum = 0;
var i = setInterval(() => {
sum = calculatePartialSum(sum);
if(isDone(sum))
clearInterval(i); // stop
},0);
超时设置为 0 的 setInterval 将尽可能频繁地运行其中的代码,但主线程(和 UI(可以在每次调用之间更新。
@schteppe:谢谢!对于有相同问题的人。我用 emscripten_async_call(( 解决了它。
主.js
Module.cwrap('calc', 'undefined', [])();
计算.cpp
void calc() {
EM_ASM({ progressBar($0); }, value);
emscripten_async_call("calcfunction, NULL, msec");
}
void calcfunction() {
...
calc something
...
}
相关文章:
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- cmake更新缓存的变量
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 已修改的LinkedList未在文本文件本身中更新
- Qt:当QListView获得新条目时,如何更新QStringList
- 更新的矢量元素不打印
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 如何在ECS框架中更新组件数据和通知系统
- 从VS 2015更新3更新到VS2015更新3 d后浮点计算行为不同的原因
- 如果我想在没有更新编译器的情况下使用新功能,该怎么办?
- 如何在 C++11 中查找和更新向量中的一个嵌套结构
- (SFML)按下键时,播放器构造函数未使用正确的动画进行更新
- 在 emscripten 网页汇编正在运行期间更新进度条?
- 在运行时使用范围更新结果
- 用非原子更新原子变量,反之亦然