Название: Qthread, Qsocket, сигналы-слоты.., Pyqt, Qt.4.8 , win7 Отправлено: andrewshkovskii от Январь 18, 2012, 19:45 Проблема : есть гуи-софтина, в которой есть длительная операция и работа сокетами (tcp).
При длительной операции гуи-поток подвисает, подвисают и сокеты и сервер сбрасывает подключение по этим сокетами( кот.подписли) Описание объектов : Менеджер сокетов - содержит в себе список всех сокетов и обрабатывает данные, поступившие от них, а так же всяческие исключительные ситуации, живет в основном потоке ГУИ - гуёвина где и происходит длительная операция, кот. подвешивает основной поток. Объект-поток UpQSocketThread - поток с сокетом. Цель : Заставить сокет работать в потоке, отличным от гуи, да так, что бы все те слоты объекта-потока, соединенные с содержащимся в нем(объекте-потоке) сокете выполнялись в отдельном потоке. А слоты, соединенные с сигналами объекта-потока выполнялись в основном потоке. Вопрос : Где (в run() или конструкторе объекта-потока) создавать сокет для объекта-потока и соединять сигналы сокета со слотами объекта-потока и каким типом соединения. И каким типом соединения соединять сигналы объекта-потока с слотами менеджера сокетов. Вот код, для наглядности. При данном коде происходит следующее : Часто получаю сообщения типа : Цитировать QObject::connect: Cannot queue arguments of type 'QAbstractSocket::SocketError' Или же (Make sure 'QAbstractSocket::SocketError' is registered using qRegisterMetaType().) Цитировать QObject::connect: Cannot queue arguments of type 'QAbstractSocket::SocketError' Или вовсе софтина крашиться. (Make sure 'QAbstractSocket::SocketError' is registered using qRegisterMetaType().) Что я не понял?как правильно сделать? Код
Сигналы объекта-потока подключаются аналогично(AutoConnection), после создания объекта-потока. |