2014-12-05 67 views
2

如何从不同的家庭如何控制不同的家庭作业在eclipse

例如,当我在Eclipse中执行以下操作控制作业:

  1. 从“项目”菜单,选择“清洁”。然后出现对话框,我点击“确定”按钮。
  2. 然后开始“清理所有项目”操作。在操作过程中,我尝试从工作区中删除一些文件。
  3. 出现以下对话框,“用户操作正在等待”,我进行的第一个操作“清理所有操作”的进程仍在继续。第二个“删除”操作将被阻止,显示“锁定”符号并显示消息“阻止:用户操作正在等待清理所有项目以完成”。仅完成第一个操作后,将出现“删除”操作对话框。

我需要什么?

我想在我的项目中得到与上面类似的情况。

  1. 我在教程“On the eclipse”中为我的项目创建了一个工作族。
  2. 我安排作业在后台执行一些操作。
  3. 只要操作进行,我试图删除该文件。只要我选择“删除”,就会出现删除对话框。然而,我需要的是阻止这个删除操作,直到我执行的第一个操作完成了类似的方式,正如我在上面的例子中所述。

如何使用eclipse作业来完成。我尝试使用job.join(),job.setPriority()和所有.... 如果您有任何想法,请分享

回答

0

您使用'调度规则'来定义哪些作业可以同时运行。调度规则是实现接口的类。

一个简单的规则是:

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

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

这将只允许一个作业本规则在运行。使用这样的:

ISchedulingRule rule = new MutexRule(); 

Job job1 = new .... 
Job job2 = new .... 

job1.setRule(rule); 
job2.setRule(rule); 

job1.schedule(); 
job2.schedule(); 

注意IResource延伸ISchedulingRule并实现了规则停止两项工作同时访问同一资源。

所以有一次只有一个作业修改工作区,你可以使用:

ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot(); 

(因为IWorkspaceRoot延伸IResource)。 Eclipse对许多作业使用此规则。

您还可以使用IResourceRuleFactory来创建控制资源访问的规则。

IResourceRuleFactory factory = ResourcesPlugin.getWorkspace().getRuleFactory(); 

还有一类MultiRule允许你把几个调度规则结合起来。