2

たとえば、selftジョブを含む2つのメソッドがあります

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() からのジョブを結合としてマークすると、method1() が実行されるまで method2() は開始されませんが、進行状況バーは表示されません。

正しく動作させるには?)

4

1 に答える 1

2

ジョブルールを設定して、2 つのジョブが同時に実行されないようにします。

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>);

両方のジョブが同じミューテックス インスタンスを使用していることを確認してください。

これは次のことを行う必要があります。

  1. 2 つのジョブが同時に実行されないようにする (両方が同じルールを使用している場合)
  2. スケジュールした順序で実行する

ところで: を使用してジョブをスケジュールしていないjob.schedule()ため、実際には、投稿したコードを使用してジョブを実行することさえできません...

于 2012-02-02T09:57:03.010 に答える