gpt4 book ai didi

java - syncExec() 的 SWT 问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:31:23 33 4
gpt4 key购买 nike

这是我在 StackOverflow 上的第一个问题(抱歉我的英语不好)。我会尽力解释这个问题。

我有一个带有前台 jade 应用程序的 swt 应用程序,其中我有一个进度条来通知应用程序的持续时间。要刷新此进度条,我使用:

if(Display.getCurrent() != null) {
progress.run();
}
else {
sShell.getDisplay().syncExec(progress);
}

进度是:

Runnable progress = new Runnable() {
public void run () {
if (progressBar.isDisposed ())
return;
int percentage= (numStep*100)/maxSteps;
progressBar.setSelection(percentage);
if (numStep >= maxSteps){
label1.setText("The simulation has been completed.");
button.setEnabled(true);
}
}
};

我尝试分析此 Runnable 所花费的时间并且它是恒定的,但是当我分析此行时 sSehll.getDisplay().syncExec(progress) 花费不同的时间(从 0 毫秒到 XXXX 毫秒)

我看过了

syncExec(Runnable runnable) causes the current thread (if it is different than the user interface thread of the display) to wait for the runnable to finish.

但是Runnable是时间常数...

有人可以指导我吗?我不明白为什么有时需要 3 分钟,有时需要其他时间。

谢谢

最佳答案

SWT Display 类中有两个方法,syncExec 和aSyncExec。当您有一个不是 UI 线程的线程想要以某种方式更新 UI 时,它们都会被使用。基本上,当您调用它们时,您基本上是在对 UI 线程说,您有一些事情希望它在有机会时执行。因此 UI 线程将继续其当前工作,并在某个时候执行您要求它执行的操作。当它执行时,它总是会有所不同,具体取决于当时 UI 线程必须执行的其他工作。

aSyncExec 和 syncExec 之间的区别在于调用它的代码是否等待执行完成。如果调用 aSyncExec,则调用线程中的下一条语句的执行将立即执行。如果您调用 syncExec,那么您的调用线程将等待 UI 线程实际执行代码并返回。通过计算执行 syncExec 所需的时间,您不仅可以计算运行方法执行所需的时间,还可以计算 UI 线程实际开始运行它所需的时间。

不要试图在这里将 syncExec 与 aSyncExec 交换。如果计算执行 aSyncExec 需要多长时间,您会发现它更快。但那是因为您要计时的只是告诉 UI 线程您有事情要做需要多长时间(而不是需要多长时间)。

关于java - syncExec() 的 SWT 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2379453/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com