Как установить порядок выполнения задания Eclipse? - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть 2 метода, которые содержат задания selft, например,

protected void method1(){
 String name=getName();//return name based on combobox selection
 Job job= new Job("first job"){
            @Override
            protected IStatus run(IProgressMonitor monitor) {
            someActions();
      }
   }
}

protected void method2(){
 String name=getName();//return name based on combobox selection
 Job job= new Job("second job"){
            @Override
            protected IStatus run(IProgressMonitor monitor) {
            someActions();
      }
   }
}

method1 и method2 могут быть вызваны отдельно. С собственным индикатором выполнения

У меня также есть кнопка для вызова обоих методов

 btnUpdate.addListener(SWT.MouseUp, new Listener() {

            @Override
            public void handleEvent(Event event) {
                         method1();
                         method2();
                    }
     }

но эта конструкция работает некорректно, поскольку задание из метода method2 () запускается раньше, чем задание из method1 () завершается.Также, если я помечаю задание из method1 () как join, тогда method2 () не запускается до тех пор, пока не выполнится method1 (), но индикатор выполнения не отображается

Как заставить его работать правильно?)

1 Ответ

2 голосов
/ 02 февраля 2012

Предотвратите одновременное выполнение двух заданий, установив правило задания:

public class Mutex implements ISchedulingRule {

        public boolean contains(ISchedulingRule rule) {
            return (rule == this);
        }

        public boolean isConflicting(ISchedulingRule rule) {
            return (rule == this);
        }

}// Mutex

public static final ISchedulingRule mutex = new Mutex();

для обоих заданий:

job.setRule(<your mutex instance>);

Убедитесь, что оба задания используют один и тот же мьютекс-instance!

Это должно:

  1. Запретить запуск двух заданий одновременно (если они оба используют одно и то же правило)
  2. Выполнить их впорядок их планирования

Кстати: вы не планируете свои задания с использованием job.schedule(), поэтому на самом деле они даже не должны выполняться с использованием кода, который вы разместили ...

...