Skip to content

Commit d043ad7

Browse files
committed
修复了扫描时进度条未结束 时 开始按钮已恢复
1 parent 2ca5a54 commit d043ad7

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

main_gui.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,7 @@ def update_now(self, value: float):
582582
self.last_update = time()
583583

584584
def finish(self):
585+
self.update_now(self._max)
585586
self.update_progress_text(0)
586587

587588

@@ -802,6 +803,7 @@ def __init__(self, master: Misc, logger: Logger, server_list: ServerList):
802803
self.scan_obj = ServerScanner()
803804
self.callback_lock = Lock()
804805
self.progress_var = 0
806+
self.callback_workers = 0
805807

806808
# 进度条
807809
self.progress_bar = InfoProgressBar(self, interval=0.05, text="扫描进度: ")

scanner.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ def __init__(self):
2323
self.timeout = None
2424
self.work_queue = Queue()
2525
self.in_scan = False
26+
self.callback_count = 0
27+
self.callback_count_lock = Lock()
2628
self.pause_lock = Lock() # 暂停锁
2729
self.worker_count: int = 0 # 线程数
2830
self.working_worker: int = 0 # 工作中的线程数
@@ -78,7 +80,14 @@ def scan_a_port(self, port: int, callback: Any):
7880
if raw_info["status"] == "online":
7981
Thread(target=callback, args=(ServerInfo(raw_info["info"]),)).start()
8082
return
81-
Thread(target=callback, args=(raw_info,)).start()
83+
Thread(target=self._callback, args=(raw_info, callback)).start()
84+
85+
def _callback(self, raw_info, callback: Any):
86+
with self.callback_count_lock:
87+
self.callback_count += 1
88+
callback(raw_info)
89+
with self.callback_count_lock:
90+
self.callback_count -= 1
8291

8392
def scan_worker(self):
8493
with self.thread_num_lock:
@@ -108,7 +117,12 @@ def scan_worker(self):
108117
self.worker_count -= 1
109118
self.working_worker -= 1
110119
if self.worker_count <= 0:
111-
self.in_scan = False
120+
Thread(target=self.check_callback_over_thread, daemon=True).start()
121+
122+
def check_callback_over_thread(self):
123+
while self.callback_count > 0:
124+
sleep(0.05)
125+
self.in_scan = False
112126

113127

114128
class Port:

0 commit comments

Comments
 (0)