Eclipse RCP--如何使用线程使用(等待和通知)执行暂停/恢复按钮功能

时间:2012-06-30 20:13:24

标签: eclipse button rcp thread-synchronization

问题陈述: -

我有一个UI按钮“执行” - 它会在不同的线程中循环启动一个大的后台进程。 一旦该过程开始,按钮文本将切换为“暂停” 现在按“暂停”,我需要暂停线程执行,“恢复”最终会通知继续。

按下按钮“执行”,线程开始,按钮切换到“暂停”,如果我按暂停,线程暂停。但我无法恢复正在运行的线程。如果我在恢复按钮按事件中检查线程状态,我得到的值= 0,相当于NONe。请帮忙。以下是我的代码......

  

块引用

performBButton.addSelectionListener(new SelectionListener() {
        @Override
        public void widgetSelected(SelectionEvent e) {
            Button btnToggle = (Button) e.getSource();
            MyJob myJob = new MyJob();
            if (btnToggle.getText().equalsIgnoreCase("Perform")) {
                btnToggle.setText("Pause");
                myJob.schedule();

            }
            else if (btnToggle.getText().equals("Pause")) {
                buttonToggle.setText("Resume");
                isPaused=!isPaused;
            }
            else if (btnToggle.getText().equals("Resume")) {
                buttonToggle.setText("Pause");
                isPaused=!isPaused;
                synchronized (myJob) {
                    myJob.notify();
                  }
            }
        }
    });

class MYJob extends Job{
   public void run(IProgessMonito monitor) {
       @Override
       public void run() {
           for (int i=0;i<50000;i++) {
               System.out.println("Iteration "+i +isPaused);
                    synchronized (this) {
                        if (isPaused) {                               
                                wait();
                            } 
                        }
                    }
         Thread.sleep(1000);//I have removed try catch while pasting here

    }
}
}
}

1 个答案:

答案 0 :(得分:0)

将wait()更改为myThread.wait()实际上通过全局声明myThread解决了我的问题。但这不是正确的方法,任何进一步的建议都会有所帮助......