取消单个Webworker事件

时间:2012-06-14 20:53:08

标签: javascript web-worker

是否可以取消worker.postMessage(..)调用的单个操作的处理? 有worker.terminate()方法,但它会取消任何等待事件。此外,它似乎使整个工作人员死亡,因为它不会对进一步的postMessage电话做出反应。

另一方面,为每个任务创建一个新的Worker似乎没用,如果它们对大量公共数据进行操作,则必须从Worker遍历到{{1通过主脚本,每次都克隆整个数据。

2 个答案:

答案 0 :(得分:4)

确实worker.terminate()杀死了线程。由于WebWorkers存在大量内存和CPU开销,因此这个事实可能很昂贵。

处理单个事件取消的方法是在postMessage回调中托管某种控制器逻辑。您的工作人员可以拥有状态,因此您必须在内部跟踪该状态,并使用该信号量停止或启动进程。

一种方法可能是创建一个共享Worker,它甚至可以在选项卡中使用,然后让该共享工作程序在必要时处理其他线程。

答案 1 :(得分:1)

如果通过postmessage将标志x设置为“暂停”特定处理作业,直到通过postmessage给出绿灯,则需要在工作人员中编写代码,您需要为代码提供kickstart以重新开始处理。

错误的javascript不支持指针,否则你不会有内存问题。