59 lines
1.4 KiB
Python
59 lines
1.4 KiB
Python
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()
|