gpt4 book ai didi

java - 高速使用其他线程中的 StyledText.append()

转载 作者:行者123 更新时间:2023-12-02 07:09:31 26 4
gpt4 key购买 nike

我正在使用 SWT 编写一个桌面应用程序,它以高速(每秒近 100 个数据包)从网络接收日志数据。每个数据包都包含一行,必须将其附加到 StyledText 中。由于我在非 UI 线程中接收数据包,因此我必须使用以下代码:

    display.asyncExec(new Runnable() {

@Override
public void run() {
txtLog.append(log);
txtLog.setTopIndex(txtLog.getLineCount() - 1);
}
});

但是这段代码使我的记录器太慢,并且我的记录器的输出与发送者不同步。例如,我停止发送器设备,我的程序日志输出在 3 分钟后停止!!,但是,eclipse 控制台输出( System.out.println() )与发送器完全同步并按时停止输出! eclipse setText()StyledText 是如何实现的?

最佳答案

有两件事:

使用asyncExec而不是syncExec - 这将使您的记录器本身变得更快。但是,如果记录器条目的添加速度快于 UI 线程的处理速度,那么事件队列就会变得越来越大...并且您将得到与您概述的相同的缓慢响应...

StyledText 的所有更改 - 包括附加到它 - 都相当昂贵。因此,您可能还需要在记录器和 StyledText 小部件之间有一个中间缓冲区:

  • 记录器添加到缓冲区
  • 如果缓冲区空,则执行asyncExec
  • asyncExec Runnable 将追加当前缓冲区内容并清空缓冲区

这在我的一个应用程序中非常有效......

关于java - 高速使用其他线程中的 StyledText.append(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701302/

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