import time from PySide6.QtCore import QThread, QMutex, QWaitCondition, Signal, SignalInstance from queue import Queue from br_com_message import BrComMessage class CmdServer(QThread): signal_write: SignalInstance = Signal(bytes) # POLL_INTERVAL_TIME = 0.05 POLL_INTERVAL_TIME = 0.05 def __init__(self): super().__init__() self.isPause = True self.isCancel = False self.cmd_queue = Queue() self.con = QWaitCondition() self.mutex = QMutex() self.mutex_rw = QMutex() def pause(self): self.isPause = True def resume(self): self.isCancel = False self.isPause = False self.con.wakeAll() print('cmd server thread resume') def cancel(self): self.resume() self.isCancel = True def write(self, p_data: bytes): self.signal_write.emit(p_data) def run(self): while not self.isCancel: self.mutex.lock() if self.isPause: self.con.wait(self.mutex) if self.isCancel: break self.mutex.unlock() if not self.cmd_queue.empty(): m_msg: BrComMessage = self.cmd_queue.get() msg_bytes = bytes(m_msg.gen_message()) self.signal_write.emit(msg_bytes) time.sleep(self.POLL_INTERVAL_TIME) if __name__ == "__main__": server = CmdServer() server.cmd_queue.put()