2012-11-20 104 views
1

我正在使用Job類創建一些任務,我正在使用進度監視器來顯示進度視圖中的進度。eclipse rcp進度監視器

Job createNewJobRun(final int i, final Job previousJob) { 
    Job job = new Job("Test Job " + i) { 
     @Override 
     protected IStatus run(IProgressMonitor monitor) { 
      monitor.beginTask("Job is running", 100); //$NON-NLS-1$ 

      if (previousJob != null) { 
       try { 
        previousJob.join(); 

       } catch (InterruptedException e1) { 
        e1.printStackTrace(); 
       } 
      } 
          // do the real work 
      monitor.done(); 
      return Status.OK_STATUS; 
     } 
    }; 

    job.schedule(); 
    return job; 

} 

我不想運行並聯機器人的工作,但順序,我怎麼能初始化工作在進度視圖來顯示前一結束後,將執行。 上面的代碼只是等待前一個,所以它阻止第二個工作後,沒有進度條顯示...

回答

3

的調度規則應該是這樣的:

public class MutexRule implements ISchedulingRule { 
     public boolean isConflicting(ISchedulingRule rule) { 
     return rule == this; 
     } 
     public boolean contains(ISchedulingRule rule) { 
     return rule == this; 
     } 
    } 

制定規則和調度:

Job job1 = new SampleJob(); 
    Job job2 = new SampleJob(); 
    MutexRule rule = new MutexRule(); 
    job1.setRule(rule); 
    job2.setRule(rule); 
    job1.schedule(); 
    job2.schedule() 

來源:Eclipse Wiki: FAQ How do I prevent two jobs from running at the same time?

0

一個可能的解決方案是使用調度規則的提議@TomSeidel和@SambiReddy,但這種解決方案有一些限制。

尤其是,只有在前面的所有作業完成之前,您才安排多個新作業,因爲通常使用的調度規則沒有序列概念。這可以是固定的,但結果通常很難維護。

你不會寫任何有關工作的問題,但如果我們談論重複同樣的工作,那麼簡單的解決方案就是在工作完成之前重新安排工作。

Job job = new Job("Test Job " + i) { 
    @Override 
    protected IStatus run(IProgressMonitor monitor) { 
     monitor.beginTask("Job is running", 100); //$NON-NLS-1$ 

         // do the real work 
     monitor.done(); 

     schedule(...); 
     return Status.OK_STATUS; 
    } 
}; 

job.schedule();