gpt4 book ai didi

javascript - 中断循环的 WebWorker

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

<分区>

我有一个 Dedicated Webworker,它在收到启动信号后进入一个长循环,并且根据一些启动设置,循环将在给定的执行点“屈服”。

这是我的代码的简化版本

var mode = null;
var generator = null;

function* loop() {

for(var i=0;i<10000;i++) {
//Do stuff
for(var j=0;j<10000;j++) {
//Do stuff
if( mode == 'inner' ){
//Yield after each inner loop iteration
yield 2;
}
}
if( mode == 'outer' ){
//Yield after each outer loop iteration
yield 1;
}
}

/*
If mode is not inner or outer the function won't yield
and will process the whole loop in one shot
*/
return null;

}

generator = loop();

self.onmessage = function(event) {

var m = event.data;
if(m.operation == 'run') {
mode = m.mode;
generator.next();
}

if(m.operation == 'pause') {
//Set a flag and check for it in the loop
}
}

我想做的是允许 worker 按需暂停,问题是在循环中 worker 不会处理消息并且不会调用 onmessage 所以我无法发送“暂停”消息设置一个标志,然后我在循环中检查该标志。

我想做的是在每次迭代后让我的函数 yield 以允许工作线程处理消息队列,然后如果没有收到暂停信号则再次恢复函数,但是,这感觉有点 hacky。

有没有办法强制 WebWorker 在不离开循环或让步的情况下处理消息队列?或者也许是一种无需通过 onmessage() 即可设置标志的方法?

谢谢

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