Files
Feeding_control_system/service/msg_query_thread.py

52 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from PySide6.QtCore import QThread, Signal
from .msg_recorder import MessageRecorder
"""
定时查询消息数据库, 并发送最新的消息数据
"""
class MsgQueryThread(QThread):
# 定义信号发送消息类型1=系统2=预警)和 消息信息列表
new_messages = Signal(int, list) # (message_type, [(content, is_processed, create_time, last_modified), ...])
def __init__(self, interval=1000, query_limit = 16):
super().__init__()
self.interval = interval # 查询间隔(毫秒)
self.query_limit = query_limit # 单次查询的项目条数如每次查询16条消息
self.running = True # 线程运行标志
self.recorder = MessageRecorder() # 消息管理器
# 记录上次查询到的“最新last_modified时间”按类型区分
self.last_normal_modified = ""
self.last_warning_modified = ""
def run(self):
"""线程主逻辑: 每隔interval查询一次消息"""
while self.running:
# 1. 处理系统消息类型1
normal_msgs = self.recorder.get_latest_normal_messages(self.query_limit)
if normal_msgs:
# 找到这16条消息中最新的last_modified时间即最大的
latest_modified = max([msg[3] for msg in normal_msgs]) # msg[3]是last_modified
# 比较是否有更新(新增或状态变化)
# 注意是根据last_modified来决定是否进行界面更新的
if latest_modified != self.last_normal_modified:
self.last_normal_modified = latest_modified
self.new_messages.emit(1, normal_msgs) # 发送信号更新UI1表示系统消息
# 2. 处理预警消息类型2
warning_msgs = self.recorder.get_latest_warning_messages(self.query_limit)
if warning_msgs:
latest_modified = max([msg[3] for msg in warning_msgs])
if latest_modified != self.last_warning_modified:
self.last_warning_modified = latest_modified
self.new_messages.emit(2, warning_msgs)
self.msleep(self.interval)
def stop(self):
"""停止消息查询线程"""
self.running = False
self.wait(500)
if self.isRunning():
self.terminate()