2012-10-27 69 views
0

我有這個現有的定時器功能:如何實現無阻塞定時器與GWT

  final Timer waveTimer = new Timer() { 
       @Override 
       public void run() { 
        double value = r.getByte(); // takes quite long to finish 
        wave.renderWaveOnFly(value); 
      }}; 
      waveTimer.scheduleRepeating(50); 

但是它的工作原理,用戶界面被「封殺」,並且用戶無法點擊,並在UI做任何事直到定時器完成時,部分UI調用waveTimer.cancel(),我創建了另一個定時器,在10秒後取消該定時器,所以UI在此之前不可用。

有沒有一種方法來實現一個非阻塞計時器,使它暫停一段時間,也許只是爲了確保UI不被阻塞,用戶仍然可以在UI中執行某些操作。

我的意思是,仍然覺得用戶界面仍然有反應。

我不確定這個數字,但是就像每隔100毫秒就停一下,然後讓用戶界面讓路並在停頓後恢復100毫秒或類似的事情。我在想什麼方法來處理。

+0

不應該在UI線程中做任何昂貴的操作!爲此使用一個單獨的線程。或者,如果不能避開,請顯示「正在加載...」/「請稍等...」屏幕,最好還有一個進度指示器。 – ppeterka

+0

@ppeterka我希望我能做到這一點,但我的應用程序的功能是從Flash對象獲取的實時字節中呈現波形(當然用javascript包裝) – xybrek

+1

看看http:// stackoverflow。 com/questions/2590850/threading-in-gwt-client – Kennet

回答

1

在瀏覽器中執行UI線程計算的唯一方法是使用WebWorkers。但是,在GWT中無法使用它們:工作者代碼需要專門的GWT鏈接器,並且只能通過JSNI創建WebWorker。

FYI,SpeedTracer使用WebWorkers。

0

您可以更改getBytes()方法是一個異步調用嗎?然後UI不應該等待該方法完成。