네트워크에서 로그 데이터를 고속으로 수신하는 SWT를 사용하는 데스크톱 앱을 작성하고 있습니다 (초당 100 패킷). 각 패킷에는 StyledText
에 추가해야하는 행이 있습니다. 나는 비 UI 스레드에서 패킷을 수신하기 때문에,이 코드를 사용해야합니다 :다른 스레드의 StyledText.append()를 고속으로 사용하십시오.
display.asyncExec(new Runnable() {
@Override
public void run() {
txtLog.append(log);
txtLog.setTopIndex(txtLog.getLineCount() - 1);
}
});
을하지만이 코드는 내 로거가 너무 느리게 만들고, 내 로거의 출력은 보낸 사람과 동기화되지 않습니다. 예를 들어, 3 분 후에 송신 장치를 멈추고 프로그램 로그 출력이 멈 춥니 다. 그러나 이클립스 콘솔 출력 (System.out.println()
)은 보낸 사람과 완전히 동기화되고 출력을 정시에 종료합니다! 어떻게 일식 setText()
StyledText
?
답장을 보내 주셔서 감사합니다. 오늘 로그인 할 때까지 나는이 게시물에 실망했다. 'asyncExec()'에 대해 당신이 옳다. 실제로 나는이 메소드를'syncExec()'대신에 코드에서 사용했다. 여기에 입력하는 것이 잘못되었습니다. 이 질문에 답하기 전에 필자는 앱에서 버퍼링을 사용했고 로그 텍스트는 보낸 사람 (50fps)과 동기화되지만 작업 관리자는 내 앱에 대해 영구적으로 16 % CPU 사용량을 표시합니다. 어떻게 해결할 수 있을까요?! – MHM
"로그 텍스트가 보낸 사람 (50fps)과 동기화되었습니다."?? –
버퍼링을 한 후 스케줄러를 사용하여 20 밀리 초 (50fps)마다 asyncExec()를 실행하고 버퍼를 위젯에 추가합니다. 하지만 재사용은 거대한 CPU 사용량입니다! – MHM