PyQt5线程队列----myThread

#! D:/soft/Python/Python37
# -*- coding: utf-8 -*-

import sys
import os

from PyQt5.QtCore import (QObject, QThread, QMutex, QMutexLocker, pyqtSignal, QMetaObject,
                          QTime)
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QGuiApplication
"""模块路径加到当前模块扫描的路径里"""
sys.path.append(os.path.dirname(__file__))
# import numpy as np
# import cv2
import copy

"""
@项目 :ThreadLoop
@文件 :myThread.py    
@作者 :xsh
@时间 :2021/11/21 12:59
@功能 :
@说明 :

"""

def DrawInfo(info: object, index: object):
    print("时间:{0}当前线程ID{1:04}启动\n".format(info, index))


class myThread(QThread):
    """暂停和结束线程标志"""
    PauseFlag: bool
    PauseMutex: QMutex
    StopFlag: bool
    StopFlagMutex: QMutex

    """线程运行的回调函数和参数"""
    CallBack: object
    """线程返回值和返回值的回调函数"""
    Result: object
    ResultCallBack: object
    """当前线程序号"""
    CurrentID: int

    def __init__(self, ThreadID=int(0), parent=None):
        super(myThread, self).__init__(parent)
        self.PauseFlag = False
        self.PauseMutex = QMutex()
        self.StopFlag = False
        self.StopFlagMutex = QMutex()
        self.CurrentID = ThreadID
        self.CallBack = [QTime.currentTime().toString, ['HH:MM:SS:sss']]
        self.Result = None
        self.ResultCallBack = DrawInfo
        self.start()

    def Stop(self, value=True):
        Locker = QMutexLocker(self.StopFlagMutex)
        self.StopFlag = value
    def getStop(self) -> bool:
        return self.StopFlag
    def Pause(self, value=True):
        Locker = QMutexLocker(self.PauseMutex)
        self.PauseFlag = value
    def getPause(self) -> bool:
        return self.PauseFlag
    def Start(self, *args):
        if len(args) < 2:
            return
        if not self.getStop():
            while not self.getPause():
                self.msleep(1)
        else:
            self.Stop(False)
            self.Pause(True)
            self.start()
            while not self.isRunning():
                pass
        if len(args) == 3:
            self.CallBack = args[:2]
            self.ResultCallBack = args[2]
        else:
            self.CallBack = args[::]
            self.ResultCallBack = None
        self.Pause(False)

    def run(self) -> None:
        while not self.getStop():
            if self.getPause():
                self.msleep(1)
                continue
            self.Result = self.CallBack[0](*self.CallBack[1])
            if self.ResultCallBack is not None:
                self.ResultCallBack(self.Result, self.CurrentID)
            self.ResultCallBack = None
            self.Pause()
        pass

 

上一篇:模仿 案例 新浪注册事件


下一篇:使用aiohttp实现爬虫