我正在使用SWT编写一个桌面应用程序,它以高速率从网络接收日志数据(接近每秒100个数据包)。每个数据包都包含一行必须附加到StyledText
的行。由于我在非UI线程中收到数据包,我必须使用此代码:
display.asyncExec(new Runnable() {
@Override
public void run() {
txtLog.append(log);
txtLog.setTopIndex(txtLog.getLineCount() - 1);
}
});
但是这段代码使我的Logger太慢,我的记录器输出与发送者不同步。例如,我停止发送设备,我的程序日志输出在3分钟后停止!!但是,eclipse控制台输出(System.out.println()
)与发送器完全同步并且按时停止输出! eclipse setText()
如何StyledText
?
答案 0 :(得分:2)
两件事:
使用asyncExec
而不是syncExec
- 这将使您的记录器自动变速。但是如果记录器条目的添加速度比UI线程可以处理的速度快,那么事件队列将变得越来越大......并且你将得到与你概述的相同的慢响应......
StyledText
的所有更改 - 包括附加 - 都相当昂贵。因此,您可能还需要记录器和StyledText
小部件之间的中间缓冲区:
asyncExec
asyncExec
Runnable
将附加当前缓冲区内容并清空缓冲区这在我的一个应用程序中非常有用......