我正在使用Job类创建一些任务,我正在使用进度监视器来显示进度视图中的进度。
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;
}
我不想以并行方式运行作业,但是如何在进度视图中初始化作业以显示将在上一个完成后执行。 上面的代码只是等待前一个代码,因此在第二个作业之后阻塞并且没有显示进度条...
答案 0 :(得分: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?
答案 1 :(得分:2)
您需要查看Eclipse Jobs上的调度规则。
这应该有所帮助。 http://www.eclipse.org/articles/Article-Concurrency/jobs-api.html
答案 2 :(得分:0)
一种可能的解决方案是使用@TomSeidel和@SambiReddy提出的调度规则,但这个解决方案有很多限制。
特别是,只有在所有先前作业完成之前不安排多个新作业时才会起作用,因为通常使用的调度规则没有序列概念。这可以修复,但结果通常很难维持。
你没有写任何关于有问题的工作,但如果我们一遍又一遍地重复同一个工作,那么简单的解决方案是在工作完成之前重新安排工作。 / p>
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();