2014-12-05 64 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允許你把幾個調度規則結合起來。