如何不使用线程

时间:2013-04-28 06:43:08

标签: dart stagexl

这是关于如何在飞镖中进行“多线程”的飞镖新手问题。

(对不起,我是一位老java开发人员......)

所以我有这种代码(见下文)但是因为重新创建gui是昂贵的,我想推迟它,以便不是在_onWindowResize()中重新创建gui我想启动一个执行此操作的线程大小一直稳定。例如。一秒钟。

如果线程已经启动,则不执行任何操作。 (顺便说一句,StageXL很酷......)

(这也将修复dart调用_onWindowResize()两次的错误:html ...)

   ...
  html.window.onResize.listen((e) => _onWindowResize());
}

_createGui() {
  var shape = new Shape();
  shape.graphics.ellipse(html.window.innerWidth / 2, html.window.innerHeight / 2, html.window.innerWidth / 4, html.window.innerHeight / 4);
  shape.graphics.fillColor(Color.Red);
  stage.addChild(shape);
}

void _onWindowResize() {
  print("New window size ${html.window.innerWidth}x${html.window.innerHeight}");

  stage = new Stage('stage', canvas);
  stage.scaleMode = StageScaleMode.NO_SCALE;
  stage.align = StageAlign.TOP_LEFT;

  renderLoop = new RenderLoop();
  renderLoop.addStage(stage);
  juggler = renderLoop.juggler;

  _createGui();
}

1 个答案:

答案 0 :(得分:1)

可以通过Isolates将工作发送到Dart中的其他线程,但这不适用于您的场景,因为它主要是关于修改应用的UI。

无法在Dart中的隔离区之间共享对象(或者通常使用WebWorkers)。所以你不能将画布传递给Isolate来创建你的舞台,renderloop等等。

如果您正在进行复杂的计算(例如,物理),将它们发送到隔离区并使用结果更新UI可能是有意义的。