Good day. I can’t figure out why the program crashes with the error Process finished with exit code -1073740791 (0xC0000409). When one client connects, everything works fine, but when a second client connects, the program ends with an error. If you use the debugger, the program works fine.
from PyQt5 import QtCore, QtGui, QtWidgets
import socket, json, threading
from PyQt5.QtCore import QObject, QThread, pyqtSignal
from threading import Thread
class Ui_NetChat(QObject):
clients = []
nicknames = []
def setupUi(self, NetChat):
NetChat.setObjectName("NetChat")
NetChat.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(NetChat)
self.centralwidget.setObjectName("centralwidget")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.centralwidget)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.host_label = QtWidgets.QLabel(self.centralwidget)
self.host_label.setObjectName("host_label")
self.horizontalLayout.addWidget(self.host_label)
self.port_label = QtWidgets.QLabel(self.centralwidget)
self.port_label.setObjectName("port_label")
self.horizontalLayout.addWidget(self.port_label)
self.verticalLayout_2.addLayout(self.horizontalLayout)
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setObjectName("label_3")
self.verticalLayout.addWidget(self.label_3)
self.pl_log = QtWidgets.QPlainTextEdit(self.centralwidget)
self.pl_log.setObjectName("pl_log")
self.verticalLayout.addWidget(self.pl_log)
self.verticalLayout_2.addLayout(self.verticalLayout)
self.horizontalLayout_2.addLayout(self.verticalLayout_2)
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.startPB = QtWidgets.QPushButton(self.centralwidget)
self.startPB.setObjectName("startPB")
self.verticalLayout_3.addWidget(self.startPB)
self.stopPB = QtWidgets.QPushButton(self.centralwidget)
self.stopPB.setObjectName("stopPB")
self.verticalLayout_3.addWidget(self.stopPB)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.verticalLayout_3.addItem(spacerItem)
self.horizontalLayout_2.addLayout(self.verticalLayout_3)
NetChat.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(NetChat)
self.statusbar.setObjectName("statusbar")
NetChat.setStatusBar(self.statusbar)
self.retranslateUi(NetChat)
QtCore.QMetaObject.connectSlotsByName(NetChat)
self.startPB.clicked.connect(self.start_server)
def reportProgress(self):
print("Hello")
def retranslateUi(self, NetChat):
_translate = QtCore.QCoreApplication.translate
NetChat.setWindowTitle(_translate("NetChat", "MainWindow"))
self.host_label.setText(_translate("NetChat", "HOST"))
self.port_label.setText(_translate("NetChat", "PORT"))
self.label_3.setText(_translate("NetChat", "Лог"))
self.startPB.setText(_translate("NetChat", "Start"))
self.stopPB.setText(_translate("NetChat", "Stop"))
def start_server(self):
HOST = 'localhost'
PORT = 5555
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((HOST,PORT))
server.listen()
ui.pl_log.appendPlainText(f"Севрер запущен на HOST = {HOST} и PORT = {PORT}")
self.thread_client_conn = QThread()
self.wait_client = ThreadWaitClient(server)
self.wait_client.moveToThread(self.thread_client_conn)
self.thread_client_conn.started.connect(self.wait_client.run)
self.wait_client.thread_cleint.connect(self.window_log)
self.wait_client.thread_cleint.connect(self.hendler)
self.thread_client_conn.start()
def window_log(self, message):
ui.pl_log.appendPlainText(str(message))
# I know that the error is in this part of the code Pat 1
def hendler(self, client):
self.thread_heandler = QThread()
self.new_heandler_message = HeandlerMessage(client)
self.new_heandler_message.moveToThread(self.thread_heandler)
self.thread_heandler.started.connect(self.new_heandler_message.run)
self.thread_heandler.start()
class ThreadWaitClient(QObject):
thread_cleint = pyqtSignal(socket.socket)
def __init__(self, server):
super().__init__()
self.server = server
def run(self):
print("Start ThreadWaitClient____RUN")
while True:
client, address = self.server.accept()
self.thread_cleint.emit(client)
"""
# I know that the error is in this part of the code Pat 2
"""
class HeandlerMessage(QObject):
def __init__(self, client):
super().__init__()
self.client = client
def run(self):
print("Heandler run ")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
NetChat = QtWidgets.QMainWindow()
ui = Ui_NetChat()
ui.setupUi(NetChat)
NetChat.show()
sys.exit(app.exec_())
I was trying to get multi-threaded software using Qthread