1
0
mirror of https://github.com/ciromattia/kcc synced 2026-01-30 08:57:40 +00:00

Refactored locking mechanism (close #112)

This commit is contained in:
Paweł Jastrzębski
2014-09-27 11:44:42 +02:00
parent dfe3e10470
commit 108e351126
2 changed files with 18 additions and 26 deletions

43
kcc.py
View File

@@ -103,24 +103,22 @@ class QApplicationMessaging(QtWidgets.QApplication):
def __init__(self, argv):
QtWidgets.QApplication.__init__(self, argv)
self._memory = QtCore.QSharedMemory(self)
self._memory.setKey('KCC')
if self._memory.attach():
self._running = True
else:
self._running = False
self._memory.create(1)
self._key = 'KCC'
self._timeout = 1000
self._server = QtNetwork.QLocalServer(self)
if not self.isRunning():
self._locked = False
socket = QtNetwork.QLocalSocket(self)
socket.connectToServer(self._key, QtCore.QIODevice.WriteOnly)
if not socket.waitForConnected(self._timeout):
self._server = QtNetwork.QLocalServer(self)
# noinspection PyUnresolvedReferences
self._server.newConnection.connect(self.handleMessage)
self._server.listen(self._key)
else:
self._locked = True
socket.disconnectFromServer()
def shutdown(self):
if self._memory.isAttached():
self._memory.detach()
def __del__(self):
if not self._locked:
self._server.close()
def event(self, e):
@@ -132,7 +130,7 @@ class QApplicationMessaging(QtWidgets.QApplication):
return QtWidgets.QApplication.event(self, e)
def isRunning(self):
return self._running
return self._locked
def handleMessage(self):
socket = self._server.nextPendingConnection()
@@ -140,18 +138,13 @@ class QApplicationMessaging(QtWidgets.QApplication):
self.messageFromOtherInstance.emit(socket.readAll().data())
def sendMessage(self, message):
if self.isRunning():
socket = QtNetwork.QLocalSocket(self)
socket.connectToServer(self._key, QtCore.QIODevice.WriteOnly)
if not socket.waitForConnected(self._timeout):
return False
# noinspection PyArgumentList
socket.write(bytes(message, 'UTF-8'))
if not socket.waitForBytesWritten(self._timeout):
return False
socket.disconnectFromServer()
return True
return False
socket = QtNetwork.QLocalSocket(self)
socket.connectToServer(self._key, QtCore.QIODevice.WriteOnly)
socket.waitForConnected(self._timeout)
# noinspection PyArgumentList
socket.write(bytes(message, 'UTF-8'))
socket.waitForBytesWritten(self._timeout)
socket.disconnectFromServer()
# Adding signals to QMainWindow

View File

@@ -1024,7 +1024,6 @@ class KCCGUI(KCC_ui.Ui_KCC):
'GammaSlider': float(self.GammaValue)*100})
self.settings.sync()
self.tray.hide()
APP.shutdown()
def handleMessage(self, message):
MW.raise_()