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
+18 -25
View File
@@ -103,24 +103,22 @@ class QApplicationMessaging(QtWidgets.QApplication):
def __init__(self, argv): def __init__(self, argv):
QtWidgets.QApplication.__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._key = 'KCC'
self._timeout = 1000 self._timeout = 1000
self._server = QtNetwork.QLocalServer(self) self._locked = False
if not self.isRunning(): socket = QtNetwork.QLocalSocket(self)
socket.connectToServer(self._key, QtCore.QIODevice.WriteOnly)
if not socket.waitForConnected(self._timeout):
self._server = QtNetwork.QLocalServer(self)
# noinspection PyUnresolvedReferences # noinspection PyUnresolvedReferences
self._server.newConnection.connect(self.handleMessage) self._server.newConnection.connect(self.handleMessage)
self._server.listen(self._key) self._server.listen(self._key)
else:
self._locked = True
socket.disconnectFromServer()
def shutdown(self): def __del__(self):
if self._memory.isAttached(): if not self._locked:
self._memory.detach()
self._server.close() self._server.close()
def event(self, e): def event(self, e):
@@ -132,7 +130,7 @@ class QApplicationMessaging(QtWidgets.QApplication):
return QtWidgets.QApplication.event(self, e) return QtWidgets.QApplication.event(self, e)
def isRunning(self): def isRunning(self):
return self._running return self._locked
def handleMessage(self): def handleMessage(self):
socket = self._server.nextPendingConnection() socket = self._server.nextPendingConnection()
@@ -140,18 +138,13 @@ class QApplicationMessaging(QtWidgets.QApplication):
self.messageFromOtherInstance.emit(socket.readAll().data()) self.messageFromOtherInstance.emit(socket.readAll().data())
def sendMessage(self, message): def sendMessage(self, message):
if self.isRunning(): socket = QtNetwork.QLocalSocket(self)
socket = QtNetwork.QLocalSocket(self) socket.connectToServer(self._key, QtCore.QIODevice.WriteOnly)
socket.connectToServer(self._key, QtCore.QIODevice.WriteOnly) socket.waitForConnected(self._timeout)
if not socket.waitForConnected(self._timeout): # noinspection PyArgumentList
return False socket.write(bytes(message, 'UTF-8'))
# noinspection PyArgumentList socket.waitForBytesWritten(self._timeout)
socket.write(bytes(message, 'UTF-8')) socket.disconnectFromServer()
if not socket.waitForBytesWritten(self._timeout):
return False
socket.disconnectFromServer()
return True
return False
# Adding signals to QMainWindow # Adding signals to QMainWindow
-1
View File
@@ -1024,7 +1024,6 @@ class KCCGUI(KCC_ui.Ui_KCC):
'GammaSlider': float(self.GammaValue)*100}) 'GammaSlider': float(self.GammaValue)*100})
self.settings.sync() self.settings.sync()
self.tray.hide() self.tray.hide()
APP.shutdown()
def handleMessage(self, message): def handleMessage(self, message):
MW.raise_() MW.raise_()