From 2b756769ea4adad21332d8a294871712cd42cc3f Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期三, 26 十一月 2025 13:57:24 +0800
Subject: [PATCH] 优化了轮询逻辑注意有打印输出
---
src/chushihua/lunxun.java | 185 ++++++++++++++++++++++------------------------
1 files changed, 88 insertions(+), 97 deletions(-)
diff --git a/src/chushihua/lunxun.java b/src/chushihua/lunxun.java
index 2e3420d..c3ffeb7 100644
--- a/src/chushihua/lunxun.java
+++ b/src/chushihua/lunxun.java
@@ -5,6 +5,7 @@
import home.Fkj;
import home.MachineConfig;
import publicway.QueryData;
+import publicway.TimestampUtil;
import xitongshezhi.SystemDebugDialog;
import java.util.Iterator;
@@ -24,7 +25,7 @@
private static volatile boolean isPaused = false;
private static final AtomicBoolean shouldStop = new AtomicBoolean(false);
private static Thread pollingThread;
- private static int pollingInterval = 100; // 榛樿杞闂撮殧
+ private static int pollingInterval =50; // 榛樿杞闂撮殧
public static boolean sendChaxunzhiling=true;//鏄惁鍚戜覆鍙e彂閫佹煡璇㈡寚浠�
// 娣诲姞闈欐�佸彉閲忔帶鍒朵汉鑴告娴�
public static boolean ishaveface = false; // 鏄惁妫�娴嬪埌浜鸿劯锛岄粯璁ゆ病鏈変汉鑴�
@@ -370,19 +371,17 @@
* 浼樺寲锛氬唴瀛樼鐞嗗拰閲嶇敤瀵硅薄
*/
private static class PollingTask implements Runnable {
- private int currentIndex = 0; // 褰撳墠绱㈠紩锛岀敤浜庨亶鍘唖lotArray
- private int consecutiveFailures = 0; // 杩炵画澶辫触娆℃暟
- private static final int MAX_CONSECUTIVE_FAILURES = 5; // 鏈�澶ц繛缁け璐ユ鏁�
- private final StringBuilder debugBuilder = new StringBuilder(100); // 閲嶇敤 StringBuilder
+ private int currentIndex = 0; // 褰撳墠绱㈠紩锛岀敤浜庨亶鍘唖lotArray
+ private int consecutiveFailures = 0; // 杩炵画澶辫触娆℃暟
+ private static final int MAX_CONSECUTIVE_FAILURES = 5; // 鏈�澶ц繛缁け璐ユ鏁�
+ private final StringBuilder debugBuilder = new StringBuilder(100); // 閲嶇敤 StringBuilder
- @Override
- public void run() {
+ @Override
+ public void run() {
//System.out.println("杞鏌ヨ绾跨▼寮�濮嬭繍琛�");
while (isRunning && !Thread.currentThread().isInterrupted() && !shouldStop.get()) {
try {
-
-// System.out.println("鏌ヨ涓�.....绾跨▼");
// 妫�鏌ユ槸鍚︽殏鍋�
if (isPaused) {
synchronized (lunxun.class) {
@@ -413,81 +412,69 @@
continue;
}
- // 鏂板锛氭牴鎹崱妲界姸鎬佸拰鏌ヨ棰戠巼鍐冲畾鏄惁鍙戦�佹煡璇�
- boolean sentQuery = false;
- long currentTime = System.currentTimeMillis();
-
- // 閬嶅巻鍗℃Ы锛屽鎵鹃渶瑕佹煡璇㈢殑鍗℃Ы
- for (int i = 0; i < slotArray.length && !sentQuery; i++) {
+ // 閬嶅巻鎵�鏈夊崱妲�
+ for (int i = 0; i < slotArray.length; i++) {
+ if (!isRunning || shouldStop.get()) {
+ break;
+ }
+
int slotIndex = (currentIndex + i) % slotArray.length;
Fkj slot = slotArray[slotIndex];
if (slot != null) {
String hasCard = slot.getHasCard();
int slotNumber = slotIndex + 1;
- Long lastQueryTime = lastQueryTimeMap.get(slotNumber);
- // 鏂板锛氬鏋滄湁浜鸿劯妫�娴嬶紝鍒欏彧鏌ヨ鏃犲崱鍗℃Ы
+ // 妫�鏌ユ槸鍚﹀洜涓轰汉鑴告娴嬮渶瑕佽烦杩囨湁鍗″崱妲�
if (ishaveface && "1".equals(hasCard)) {
- // 璺宠繃鏈夊崱鍗℃Ы鐨勬煡璇�
+ // 璺宠繃鏈夊崱鍗℃Ы锛岀珛鍗崇户缁笅涓�涓紝涓嶇瓑寰�
if (DEBUG_ENABLED) {
debugBuilder.setLength(0);
debugBuilder.append("妫�娴嬪埌浜鸿劯锛岃烦杩囨湁鍗″崱妲� ").append(slotNumber).append(" 鐨勬煡璇n");
SystemDebugDialog.appendAsciiData(debugBuilder.toString());
}
- continue;
+ continue; // 绔嬪嵆缁х画涓嬩竴涓崱妲斤紝涓嶇瓑寰�
}
- // 纭畾鏌ヨ闂撮殧锛氬彧鏈塰asCard="1"鐨勫崱妲戒娇鐢�10绉掗棿闅旓紝鍏朵粬鎯呭喌锛堝寘鎷�"-1"锛夐兘浣跨敤100ms闂撮殧
- int queryInterval = "1".equals(hasCard) ? HAS_CARD_QUERY_INTERVAL : NO_CARD_QUERY_INTERVAL;
+ // 鍙戦�佹煡璇㈡寚浠ゅ埌褰撳墠鍗℃Ы
+ boolean sendSuccess = sendQueryToSlot(slotNumber);
+
+ if (sendSuccess) {
+ // 鏇存柊鏈�鍚庢煡璇㈡椂闂�
+ lastQueryTimeMap.put(slotNumber, System.currentTimeMillis());
+ consecutiveFailures = 0;
- // 妫�鏌ユ槸鍚﹁揪鍒版煡璇㈡椂闂�
- if (lastQueryTime == null || currentTime - lastQueryTime >= queryInterval) {
- if (sendQueryToSlot(slotNumber)) {
- // 鏇存柊鏈�鍚庢煡璇㈡椂闂�
- lastQueryTimeMap.put(slotNumber, currentTime);
- sentQuery = true;
- consecutiveFailures = 0;
-
- // 鎴愬姛鍙戦�佹煡璇㈠悗锛岀瓑寰�100ms鍐嶇户缁笅涓�涓煡璇�
- Thread.sleep(100);
-
- if (DEBUG_ENABLED) {
- String status;
- if ("1".equals(hasCard)) {
- status = "鏈夊崱";
- } else if ("-1".equals(hasCard)) {
- status = "鏈煡";
- } else {
- status = "鏃犲崱";
- }
-
- // 浣跨敤閲嶇敤鐨� StringBuilder 鏋勫缓璋冭瘯淇℃伅
- debugBuilder.setLength(0);
- debugBuilder.append("Slot ").append(slotNumber)
- .append(" (").append(status).append(") 鏌ヨ鎴愬姛锛岄棿闅�: ")
- .append(queryInterval).append("ms\n");
- SystemDebugDialog.appendAsciiData(debugBuilder.toString());
+ if (DEBUG_ENABLED) {
+ String status;
+ if ("1".equals(hasCard)) {
+ status = "鏈夊崱";
+ } else if ("-1".equals(hasCard)) {
+ status = "鏈煡";
+ } else {
+ status = "鏃犲崱";
}
- } else {
- consecutiveFailures++;
- if (consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {
- logErrorWithRateLimit("consecutive_failures", "lunxun杩炵画澶辫触娆℃暟杩囧锛屾殏鍋滆疆璇�");
- pausePolling();
- break;
- }
+
+ debugBuilder.setLength(0);
+ debugBuilder.append("Slot ").append(slotNumber)
+ .append(" (").append(status).append(") 鏌ヨ鎴愬姛\n");
+ SystemDebugDialog.appendAsciiData(debugBuilder.toString());
+ }
+ } else {
+ consecutiveFailures++;
+ if (consecutiveFailures >= MAX_CONSECUTIVE_FAILURES) {
+ logErrorWithRateLimit("consecutive_failures", "lunxun杩炵画澶辫触娆℃暟杩囧锛屾殏鍋滆疆璇�");
+ pausePolling();
+ break;
}
}
+
+ // 鍙戦�佹煡璇㈡寚浠ゅ悗绛夊緟50ms锛岀劧鍚庣户缁笅涓�涓崱妲�
+ Thread.sleep(50);
}
}
// 鏇存柊褰撳墠绱㈠紩
currentIndex = (currentIndex + 1) % slotArray.length;
- // 濡傛灉娌℃湁鍙戦�佹煡璇紝绛夊緟涓�娈垫椂闂村啀缁х画
- if (!sentQuery) {
- Thread.sleep(pollingInterval);
- }
-
} catch (InterruptedException e) {
//System.out.println("杞鏌ヨ绾跨▼琚腑鏂�");
Thread.currentThread().interrupt();
@@ -527,45 +514,49 @@
* 鍚戞寚瀹氬崱妲藉彂閫佹煡璇㈡寚浠� - 浼樺寲鐗堟湰
* 浣跨敤缂撳瓨鎸囦护锛屼紭鍖栬皟璇曡緭鍑�
*/
- private boolean sendQueryToSlot(int slotNumber) {
- try {
- // 浣跨敤缂撳瓨鐨勬煡璇㈡寚浠�
- String queryCommand = getCachedQueryCommand(slotNumber);
-// System.out.println("鎸囦护鏄細"+queryCommand);
- if (DEBUG_ENABLED) {
- SystemDebugDialog.appendAsciiData("send to "+slotNumber+" queryCommand");
- }
+ /**
+ * 鍚戞寚瀹氬崱妲藉彂閫佹煡璇㈡寚浠� - 浼樺寲鐗堟湰
+ * 浣跨敤缂撳瓨鎸囦护锛屼紭鍖栬皟璇曡緭鍑�
+ */
+ private boolean sendQueryToSlot(int slotNumber) {
+ try {
+ // 浣跨敤缂撳瓨鐨勬煡璇㈡寚浠�
+ String queryCommand = getCachedQueryCommand(slotNumber);
+ System.out.println(slotNumber+"鍙戦�佷簡鎸囦护鏄細"+queryCommand+"鏃堕棿"+TimestampUtil.getTimestamp());
+
+ if (DEBUG_ENABLED) {
+ SystemDebugDialog.appendAsciiData("send to "+slotNumber+" queryCommand");
+ }
- if (queryCommand != null && !queryCommand.trim().isEmpty()) {
- // 鍙戦�佸埌涓插彛
+ if (queryCommand != null && !queryCommand.trim().isEmpty()) {
+ // 鍙戦�佸埌涓插彛
+ if(sendChaxunzhiling) {
+ boolean sendResult = Sendmsg.sendMessage(queryCommand);
+ if (sendResult) {
+ return true;
+ } else {
+ if (DEBUG_ENABLED) {
+ SystemDebugDialog.appendAsciiData(slotNumber+" Send query command to card slot err");
+ }
+ // 鍙戦�佸け璐ュ彲鑳芥槸涓插彛鏂紑锛屾洿鏂拌繛鎺ョ姸鎬�
+ serialConnected = false;
+ return false;
+ }
+ } else {
+ return false;
+ }
+ } else {
+ logErrorWithRateLimit("empty_query_command", "鐢熸垚鐨勬煡璇㈡寚浠や负绌猴紝鍗℃Ы: " + slotNumber);
+ return false;
+ }
- if(sendChaxunzhiling) {
- boolean sendResult = Sendmsg.sendMessage(queryCommand);
- if (sendResult) {
- return true;
- } else {
- if (DEBUG_ENABLED) {
- SystemDebugDialog.appendAsciiData(slotNumber+" Send query command to card slot err");
- }
- // 鍙戦�佸け璐ュ彲鑳芥槸涓插彛鏂紑锛屾洿鏂拌繛鎺ョ姸鎬�
- serialConnected = false;
- return false;
- }
- }else {
- return false;
- }
- } else {
- logErrorWithRateLimit("empty_query_command", "鐢熸垚鐨勬煡璇㈡寚浠や负绌猴紝鍗℃Ы: " + slotNumber);
- return false;
- }
-
- } catch (Exception e) {
- logErrorWithRateLimit("send_query_exception", "鍙戦�佹煡璇㈡寚浠ゅ埌鍗℃Ы " + slotNumber + " 鏃跺彂鐢熷紓甯�: " + e.getMessage());
- // 鍙戠敓寮傚父鏃舵洿鏂颁覆鍙h繛鎺ョ姸鎬�
- serialConnected = false;
- return false;
- }
- }
+ } catch (Exception e) {
+ logErrorWithRateLimit("send_query_exception", "鍙戦�佹煡璇㈡寚浠ゅ埌鍗℃Ы " + slotNumber + " 鏃跺彂鐢熷紓甯�: " + e.getMessage());
+ // 鍙戠敓寮傚父鏃舵洿鏂颁覆鍙h繛鎺ョ姸鎬�
+ serialConnected = false;
+ return false;
+ }
+ }
}
/**
--
Gitblit v1.10.0