2013-04-28 1 views
2

이것은 다트에서 "멀티 스레딩"을 수행하는 방법에 대한 새소식입니다.스레드를 사용하지 않는 방법

(I 오래된 자바 개발자입니다 실례합니다 ...)

그래서 나는 SE (아래) 이런 종류의 코드를 가지고 있지만 GUI를 다시하는 것은 비용이 많이 드는이기 때문에 그래서 그것을 연기처럼 그 대신 다시 것 _onWindowResize()의 gui는 크기가 약간 안정적 일 때이를 수행하는 스레드를 시작하고 싶습니다. 예 : 1 초 동안.

스레드가 이미 시작된 경우 아무 작업도 수행하지 않습니다.

... 
    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(); 
} 
+0

참고 : 이것은 stagexl이 다소 나를 위해이 작업을 수행한다는 것을 알았 기 때문에 나쁜 예입니다.하지만 여하튼 질문은 일반적인 것입니다. –

답변

1

하나가 일을 보낼 수 있습니다

(HTML ... 이것은 또한 _onWindowResize()가 다트를 두 번 호출되는 버그를 수정합니다) (, BTW StageXL는 .... 멋지다) 다트의 다른 스레드는 Isolates입니다.하지만 앱의 UI를 수정하는 것이 대부분이므로 사용자 시나리오에서는 작동하지 않습니다.

Dart (또는 WebWorkers 일반적으로 사용)에서 격리 된 개체는 공유 할 수 없습니다. 따라서 캔버스를 분리 물에 전달하여 무대, 렌더 루프 등을 만들 수는 없습니다.

복잡한 계산 (예 : 물리학)을 수행하는 경우이를 분리 물로 보내고 결과를 사용하는 것이 좋습니다 UI를 업데이트합니다.