rnc_tuning/cmd_server.py

59 lines
1.4 KiB
Python
Raw Normal View History

2025-02-14 11:11:41 +08:00
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()