本文整理汇总了Python中PyQt5.QtCore.QMutex.tryLock方法的典型用法代码示例。如果您正苦于以下问题:Python QMutex.tryLock方法的具体用法?Python QMutex.tryLock怎么用?Python QMutex.tryLock使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PyQt5.QtCore.QMutex
的用法示例。
在下文中一共展示了QMutex.tryLock方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: VcsStatusMonitorThread
# 需要导入模块: from PyQt5.QtCore import QMutex [as 别名]
# 或者: from PyQt5.QtCore.QMutex import tryLock [as 别名]
class VcsStatusMonitorThread(QThread):
"""
Class implementing the VCS status monitor thread base class.
@signal vcsStatusMonitorData(list of str) emitted to update the VCS status
@signal vcsStatusMonitorStatus(str, str) emitted to signal the status of
the monitoring thread (ok, nok, op) and a status message
"""
vcsStatusMonitorData = pyqtSignal(list)
vcsStatusMonitorStatus = pyqtSignal(str, str)
def __init__(self, interval, project, vcs, parent=None):
"""
Constructor
@param interval new interval in seconds (integer)
@param project reference to the project object (Project)
@param vcs reference to the version control object
@param parent reference to the parent object (QObject)
"""
super(VcsStatusMonitorThread, self).__init__(parent)
self.setObjectName("VcsStatusMonitorThread")
self.setTerminationEnabled(True)
self.projectDir = project.getProjectPath()
self.project = project
self.vcs = vcs
self.interval = interval
self.autoUpdate = False
self.statusList = []
self.reportedStates = {}
self.shouldUpdate = False
self.monitorMutex = QMutex()
self.monitorCondition = QWaitCondition()
self.__stopIt = False
def run(self):
"""
Public method implementing the tasks action.
"""
while not self.__stopIt:
# perform the checking task
self.statusList = []
self.vcsStatusMonitorStatus.emit(
"wait", self.tr("Waiting for lock"))
try:
locked = self.vcs.vcsExecutionMutex.tryLock(5000)
except TypeError:
locked = self.vcs.vcsExecutionMutex.tryLock()
if locked:
try:
self.vcsStatusMonitorStatus.emit(
"op", self.tr("Checking repository status"))
res, statusMsg = self._performMonitor()
finally:
self.vcs.vcsExecutionMutex.unlock()
if res:
status = "ok"
else:
status = "nok"
self.vcsStatusMonitorStatus.emit(
"send", self.tr("Sending data"))
self.vcsStatusMonitorData.emit(self.statusList)
self.vcsStatusMonitorStatus.emit(status, statusMsg)
else:
self.vcsStatusMonitorStatus.emit(
"timeout", self.tr("Timed out waiting for lock"))
if self.autoUpdate and self.shouldUpdate:
self.vcs.vcsUpdate(self.projectDir, True)
continue # check again
self.shouldUpdate = False
# wait until interval has expired checking for a stop condition
self.monitorMutex.lock()
if not self.__stopIt:
self.monitorCondition.wait(
self.monitorMutex, self.interval * 1000)
self.monitorMutex.unlock()
self._shutdown()
self.exit()
def setInterval(self, interval):
"""
Public method to change the monitor interval.
@param interval new interval in seconds (integer)
"""
locked = self.monitorMutex.tryLock()
self.interval = interval
self.monitorCondition.wakeAll()
if locked:
self.monitorMutex.unlock()
def getInterval(self):
#.........这里部分代码省略.........