2010-06-11 190 views
1

我有兩個UI線程。 我想確保第一個正在完成運行,然後運行另一個。 我怎麼能這樣做? 非常感謝!如何讓1個UI線程等待另一個UI線程

UIJob uiJob = new UIJob("settext1") { 
    public IStatus runInUIThread(IProgressMonitor ipm) { 
     webBrowser.setText(finalContent); 
     return Status.OK_STATUS; 
    } 
}; 
uiJob.schedule(); 

UIJob uiJob2 = new UIJob("settext2") { 
    public IStatus runInUIThread(IProgressMonitor ipm) { 
     webBrowser.execute(executeMoreFunction); 
     return Status.OK_STATUS; 
    } 
}; 
uiJob2.schedule(); 
+0

我假設你在基本的意思是,也許Fortran語言?還是你的意思是另一種語言?這是一個重要的細節:) – 2010-06-11 01:17:25

+0

哪種語言/ GUI工具包讓你有多個UI線程? – 2010-06-11 01:18:49

+0

嗨, 這是java。 \t \t \t \t \t \t \t UIJob uiJob =新UIJob( 「settext1」){ \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t公共IStatus runInUIThread(IProgressMonitor的IPM){ \t \t \t \t \t \t \t \t \t webBrowser。的setText(finalContent); \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t回報Status.OK_STATUS; \t \t \t \t \t \t \t \t} \t \t \t \t \t \t \t}; \t \t \t \t \t \t \t uiJob.schedule(); \t \t \t UIJob uiJob2 =新UIJob( 「settext2」){ \t \t \t \t \t \t \t \t公共IStatus runInUIThread(IProgressMonitor的IPM){ \t \t \t \t \t webBrowser.execute(executeMoreFunction); \t \t \t \t \t \t \t \t \t \t回報Status.OK_STATUS; \t \t \t \t} \t \t \t}; \t \t \t uiJob2.schedule(); – dojomedojo 2010-06-11 01:31:41

回答

-1

schedule之後致電join方法。

等待此任務完成。此方法將阻止調用線程,直到 作業完成執行,或者直到此線程已被中斷爲止。如果作業 尚未安排,則此方法立即返回。從其運行方法的範圍內,不得加入作業 。 如果在從 run方法中重新安排自己的作業上調用此方法,則聯接將在第一次執行結束時返回。 換句話說,加入會在第一次退出 RUNNING狀態時返回,或者在此作業進入NONE狀態時立即返回。 如果在作業管理器掛起時調用此方法,則此作業 只會在已經運行的情況下加入;如果此作業正在等待或睡眠,則此方法立即返回 。 請注意,使用連接時存在死鎖風險。如果調用線程擁有 聯接線程正在等待的鎖定或對象監視器,將發生死鎖 。

瞭解更多:http://kickjava.com/src/org/eclipse/core/runtime/jobs/Job.java.htm#ixzz0qWh6Ahhe

+0

那我可以用這個嗎? 私人ISchedulingRule schedulingRule =新ISchedulingRule(){ \t \t公共布爾包含(ISchedulingRule規則){ \t \t \t回報(規則==本); \t \t} \t \t公共布爾isConflicting(ISchedulingRule規則){ \t \t \t回報(規則==本); \t \t} }; 然後在調度之前將規則設置爲每個作業: job1.setRule(schedulingRule); job1.schedule(); job2.setRule(schedulingRule); job2.schedule(); – dojomedojo 2010-06-11 10:45:31

1

eclipse sdk help

的UIJob是通過asyncExec UI線程中運行作業。

它只有一個UI線程,兩個UIJob:s不能等到對方,它會造成死鎖。

相關問題