如何用GWT实现非阻塞定时器

时间:2012-10-27 11:31:12

标签: 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中执行任何操作,直到计时器完成时,部分UI调用waveTimer.cancel()我创建了另一个取消此计时器的Timer 10秒后,因此UI在此之前无法使用。

有没有办法实现非阻塞计时器,以便暂停一段时间,也许只是为了确保UI没有被阻止,用户仍然可以在UI中执行某些操作。

我的意思是,仍然觉得用户界面仍然具有响应能力。

我不确定这个数字,但是说它停止了每100毫秒然后让位给UI并在暂停后恢复100毫秒或类似的东西。我在想什么方法来处理。

2 个答案:

答案 0 :(得分:1)

在浏览器中从UI线程进行计算的唯一方法是使用WebWorkers。但是在GWT中没有工具可用:工作代码需要专门的GWT链接器,只能通过JSNI创建WebWorker。

仅供参考,SpeedTracer使用WebWorkers。

答案 1 :(得分:0)

您可以将 getBytes()方法更改为异步调用吗?然后UI不应该等待方法完成。