2010-06-11 196 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不能等到对方,它会造成死锁。

相关问题