def _initServer(self): self.message("Server - initServer / threadId=" + str(int(QThread.currentThreadId()))) try: self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error as exc: raise ServerException("Socket creation failed: {0}".format(exc)); try: # Bind socket to ip 127.0.0.1 on port 1234 self.socket.bind(('127.0.0.1', 1234)); except socket.error as exc: self.socket.close(); raise ServerException("Socket bind failed: {0}".format(exc)); self.message("Server - Bind successfull") # Accept 1 connection self.socket.listen(5);
def _serverLoop(self): threads = [] threadId = 0 connection = None; raddr = None; while True: try: # Wait for connection connection = self.socket.accept(); raddr = connection[1]; except socket.error as exc: self.socket.close(); self.message("Server - Join threads") for t in threads: t.wait() quitMutex.lock() quitCopy = self.quit quitMutex.unlock() # If the exception was intentional do not reraise it. if quitCopy==True and exc.errno==10004: break; raise ServerException("Socket accept failed: {0}".format(exc)); self.message("Server - Incoming Connection by %s / threadId=%s" % (str(raddr), str(int(QThread.currentThreadId())))) newthread = ClientConnection(connection, self.message, threadId) newthread.start(QThread.HighPriority) threads.append(newthread) threadId = threadId + 1 self.message("Server - Stop")
def qtThreadId(self): return(format(int(QThread.currentThreadId()),"02x"))
import sys from PyQt5.QtWidgets import QApplication from ServerUi.serverdialog import ServerDialog from PyQt5.Qt import QDialog, QThread if __name__ == '__main__': print("main: threadId="+str(int(QThread.currentThreadId()))) app = QApplication(sys.argv) window = QDialog() w = ServerDialog() w.show() sys.exit(app.exec_())
def run(self): try: # 这个目前我没弄明白这里写法 self.handle = ctypes.windll.kernel32.OpenThread( win32con.PROCESS_ALL_ACCESS, False, int(QThread.currentThreadId())) except Exception as e: print('get thread handle failed', e) self.mains()
def stopServerClicked(self): self.message("ServerDialog.stopServerClicked - Start / threadId="+str(int(QThread.currentThreadId()))) self.worker.stopServer();