运行多个作业时,Eclipse Progress View不会刷新

时间:2012-03-14 07:58:28

标签: eclipse eclipse-rcp jobs

我在 Eclipse RCP 应用程序中运行大量并发作业时出现问题。当我启动100 Jobs (如下图所示)时,它们会正常执行,但在完成后,它们仍然可以在 Progress View 中显示约10秒钟。我希望进度视图在完成后立即清除作业。如果我少开始作业(例如10)进度视图立即刷新它。

class MyJob extends Job
{
    public MyJob(String name) {
        super(name);
    } 

    public IStatus run(IProgressMonitor monitor){
            //SOME EXPENSIVE COMPUTATIONS
        BigInteger bigint = new BigInteger("0");
        for ( int i=0 ; i<100 ; i++ ) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            bigint = bigint.add(new BigInteger(Integer.toString(i)));
        }
        monitor.done();

        System.out.println(new Random().nextInt());
        return new  Status(IStatus.OK, "foo", "OK");
    }
}

2 个答案:

答案 0 :(得分:2)

每个作业都被安排为一个单独的线程,如果有很多锁定/同步/线程管理机制需要一些开销。 for example some internal Eclipse Jobs code明确将进度条反馈机制置于睡眠状态250ms。这样的解决方案可能会长期拖延。

无论如何在Progress View中有100个条目不是用户友好的。我建议将这些工作分组为Job.setProgressGroup()。也许视图中的条目较少会掩盖响应速度慢的问题。

答案 1 :(得分:0)

在这种情况下,我会说分配自己的线程比使用Jobs更好。您的100个作业将开始使用将用于执行Workbench维护的作业线程。分配您自己的线程意味着作业线程池不会增长到最大值并保持不变。

我有一个Job启动你的Threads并将进度报告给Progress View。您可以使用SubMonitor将主IProgressMonitor拆分为100,这样您启动的每个Thread / Runnable对都可以将进度报告回主Job。