From d22349714c8d199c02f336f90fba841ef8f5cd39 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 21 十一月 2025 17:46:23 +0800
Subject: [PATCH] 优化内存后最终版202511211746

---
 src/chuankou/SerialPortService.java |  118 ++++++++++++++++++++++++++++++++---------------------------
 1 files changed, 64 insertions(+), 54 deletions(-)

diff --git a/src/chuankou/SerialPortService.java b/src/chuankou/SerialPortService.java
index 7efeb68..e2e835b 100644
--- a/src/chuankou/SerialPortService.java
+++ b/src/chuankou/SerialPortService.java
@@ -144,70 +144,83 @@
 	 * 鍚姩鏁版嵁鎺ユ敹绾跨▼
 	 */
 	public void startCapture(Consumer<byte[]> onReceived) {
-		this.dataReceivedCallback = onReceived;
-		if (capturing || port == null || !port.isOpen()) return;
-		capturing = true;
-		paused = false;
+	    this.dataReceivedCallback = onReceived;
+	    if (capturing || port == null || !port.isOpen()) return;
+	    capturing = true;
+	    paused = false;
 
-		readerThread = new Thread(() -> {
-			buffer.reset();
-			long lastReceivedTime = 0;
+	    readerThread = new Thread(() -> {
+	        buffer.reset();
+	        long lastReceivedTime = 0;
 
-			while (capturing && port.isOpen()) {
-				long currentTime = System.currentTimeMillis();
+	        while (capturing && port.isOpen()) {
+	            long currentTime = System.currentTimeMillis();
 
-				if (buffer.size() > 0 && (currentTime - lastReceivedTime) >= 20) {
-					byte[] data = buffer.toByteArray();
-					SystemDebugDialog.appendHexData(data);
+	            if (buffer.size() > 0 && (currentTime - lastReceivedTime) >= 20) {
+	                byte[] data = buffer.toByteArray();
+	                SystemDebugDialog.appendHexData(data);
 
-					// 鏂板锛氬皢鏁版嵁浼犻�掔粰鍗忚瑙f瀽鍣�
-					if (protocolParser != null) {
-						protocolParser.receiveData(data);
-					}
+	                // 鏂板锛氬皢鏁版嵁浼犻�掔粰鍗忚瑙f瀽鍣� - 纭繚濮嬬粓鎵ц
+	                if (protocolParser != null) {
+	                    protocolParser.receiveData(data);
+	                }
 
-					if (!paused) {
-						onReceived.accept(data);
-						if (responseConsumer != null) {
-							responseConsumer.accept(data);
-						}
-					}
-					buffer.reset();
-				}
+	                // 纭繚鏁版嵁鍥炶皟濮嬬粓鎵ц锛屼笉鍙楁殏鍋滅姸鎬佸奖鍝�
+	                if (dataReceivedCallback != null && !paused) {
+	                    dataReceivedCallback.accept(data);
+	                }
+	                if (responseConsumer != null && !paused) {
+	                    responseConsumer.accept(data);
+	                }
+	                buffer.reset();
+	            }
 
-				int len = port.readBytes(readBuffer, readBuffer.length);
-				currentTime = System.currentTimeMillis();
+	            int len = port.readBytes(readBuffer, readBuffer.length);
+	            currentTime = System.currentTimeMillis();
 
-				if (len > 0) {
-					buffer.write(readBuffer, 0, len);
-					lastReceivedTime = currentTime;
-				}
+	            if (len > 0) {
+	                buffer.write(readBuffer, 0, len);
+	                lastReceivedTime = currentTime;
+	            }
 
-				if (len <= 0 && buffer.size() == 0) {
-					try { Thread.sleep(1); } catch (InterruptedException ignore) {}
-				}
-			}
+	            if (len <= 0 && buffer.size() == 0) {
+	                try { Thread.sleep(1); } catch (InterruptedException ignore) {}
+	            }
+	        }
 
-			if (buffer.size() > 0) {
-				byte[] data = buffer.toByteArray();              
-				SystemDebugDialog.appendHexData(data);
+	        if (buffer.size() > 0) {
+	            byte[] data = buffer.toByteArray();              
+	            SystemDebugDialog.appendHexData(data);
 
-				// 鏂板锛氬皢鏁版嵁浼犻�掔粰鍗忚瑙f瀽鍣�
-				if (protocolParser != null) {
-					protocolParser.receiveData(data);
-				}
+	            // 鏂板锛氬皢鏁版嵁浼犻�掔粰鍗忚瑙f瀽鍣� - 纭繚濮嬬粓鎵ц
+	            if (protocolParser != null) {
+	                protocolParser.receiveData(data);
+	            }
 
-				if (!paused) {
-					onReceived.accept(data);
-					if (responseConsumer != null) {
-						responseConsumer.accept(data);
-					}
-				}
-			}
-		});
-		readerThread.setDaemon(true);
-		readerThread.start();
+	            // 纭繚鏁版嵁鍥炶皟濮嬬粓鎵ц锛屼笉鍙楁殏鍋滅姸鎬佸奖鍝�
+	            if (dataReceivedCallback != null && !paused) {
+	                dataReceivedCallback.accept(data);
+	            }
+	            if (responseConsumer != null && !paused) {
+	                responseConsumer.accept(data);
+	            }
+	        }
+	    });
+	    readerThread.setDaemon(true);
+	    readerThread.start();
+	}
+	// 鏂板锛氳缃殏鍋滅姸鎬佷絾涓嶅奖鍝嶅崗璁В鏋愬櫒
+	public void setPaused(boolean paused) {
+	    this.paused = paused;
+	    // 娉ㄦ剰锛氫笉鍋滄鍗忚瑙f瀽鍣紝鍙殏鍋淯I鍥炶皟
 	}
 
+	// 鏂板锛氬崟鐙仠姝㈡暟鎹崟鑾疯�屼笉褰卞搷鍗忚瑙f瀽鍣�
+	public void stopDataCaptureOnly() {
+	    // 鍙仠姝㈡暟鎹洖璋冿紝涓嶅奖鍝嶅崗璁В鏋愬櫒
+	    this.dataReceivedCallback = null;
+	    this.responseConsumer = null;
+	}
 	/**
 	 * 鍋滄鏁版嵁鎺ユ敹绾跨▼
 	 */
@@ -219,9 +232,6 @@
 		}
 	}
 
-	public void setPaused(boolean paused) {
-		this.paused = paused;
-	}
 
 	public boolean isPaused() {
 		return paused;

--
Gitblit v1.9.3