Название: Не срабатывает слот incomingConnection() после переноса обмена в доп. поток Отправлено: Маус от Апрель 06, 2013, 08:41 Взял пример реализации сервер-клиент на основе QTcpSocket и QTcpServer из документации, всё прекрасно работает, решил переместить обмен в доп. поток QThread. QTcpSocket прекрасно передает запросы, всегда приходит сигнал hostFound(), иногда даже приходит сигнал connected(), но на сервере не срабатывает слот incomingConnection(). Qt 4.6.0 WinXP+WinVista.
Название: Re: Не срабатывает слот incomingConnection() после переноса обмена в доп. поток Отправлено: dio от Апрель 06, 2013, 10:24 Приведите пример кода, реализации сервера и клиента.
Название: Re: Не срабатывает слот incomingConnection() после переноса обмена в доп. поток Отправлено: Маус от Апрель 07, 2013, 12:53 Мой код полностью соответствует документации, и он работал, пока его не засунули в доп. поток. Может кто-нибудь даст ссылку на работающий пример реализации клиент-сервер в доп. потоке?
Название: Re: Не срабатывает слот incomingConnection() после переноса обмена в доп. поток Отправлено: Bepec от Апрель 07, 2013, 13:23 Отвечу вам...
Код полностью соответствующий документации должен работать в доп. потоке. Покажите ваш код :) Название: Re: Не срабатывает слот incomingConnection() после переноса обмена в доп. поток Отправлено: Маус от Апрель 07, 2013, 19:18 Реализация Сервера (без .h файлов)
Код: #include "server.h" Реализация клиента Код: #include "client.h" Название: Re: Не срабатывает слот incomingConnection() после переноса обмена в доп. поток Отправлено: Bepec от Апрель 07, 2013, 19:42 Насколько я помню доку, то вообще то желательно запускать в потоке цикл событий. А то сигналы и слоты не работают как бы.
PS попробуйте там слот сделать и вызвать его через сигнал QueuedConnection'ном. Название: Re: Не срабатывает слот incomingConnection() после переноса обмена в доп. поток Отправлено: Маус от Апрель 07, 2013, 20:29 нашел про цикл событий (на стороне клиента):
http://www.prog.org.ru/topic_21076_0.html (http://www.prog.org.ru/topic_21076_0.html) но у меня в функции run() (и на сервере и у клиента) уже есть цикл по общему буферу с двумя семафорами. Как тогда объединить эти два бесконечных цикла? Название: Re: Не срабатывает слот incomingConnection() после переноса обмена в доп. поток Отправлено: Маус от Апрель 07, 2013, 20:52 QEventLoop помог.
IncomingConnection() наконец-то стал запускаться на сервере. Теперь осталось скрестить ужа и ежа (зачеркнуто) два цикла, засуну ка я в цикл событий цикл по буферу с семафорами;-) Название: Re: Не срабатывает слот incomingConnection() после переноса обмена в доп. поток Отправлено: Bepec от Апрель 08, 2013, 15:45 Событийный поток сделайте.
Аля Код: void run() |