Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Hvzh от Июнь 07, 2011, 14:47



Название: Потеря сигналов
Отправлено: Hvzh от Июнь 07, 2011, 14:47
Есть у меня многопоточное приложение. Один из потоков занимается приемом данных от сервера. При обрыве связи поток генерирует сигнал основному потоку, однако получается так, что если я генерю его только раз, он обычно теряется почему-то, то есть, не доходит до основного потока. Только если я начинаю генерить его в цикле, основной поток его получает раз на двадцатый. С чем это может быть связано? Если у меня, например, в основном потоке вызывается некая ресурсоемкая функция, работающая относительно продолжительное время, а во время ее работы поток генерит сигнал. Не может ли сигнал потеряться не дождавшись окончания работы этой функции?


Название: Re: Потеря сигналов
Отправлено: LisandreL от Июнь 07, 2011, 15:03
Сигналы из-за ресурсоёмкой функции теряться не должны, но должны приходить по завершении функции, если конечно у вас не вызывается обработчик событий внутри функции.
Скорее всего вы что-то делаете не так.
Для уверенности поставьте Qt::QueuedConnection в явном виде.
Ну и код прикладывайте, когда что-то спрашиваете.


Название: Re: Потеря сигналов
Отправлено: Hvzh от Июнь 07, 2011, 15:38
Сигналы из-за ресурсоёмкой функции теряться не должны, но должны приходить по завершении функции, если конечно у вас не вызывается обработчик событий внутри функции.
Скорее всего вы что-то делаете не так.
Для уверенности поставьте Qt::QueuedConnection в явном виде.
Ну и код прикладывайте, когда что-то спрашиваете.
У меня стоит Qt::DirectConnection, это хуже?
Код, зараза, большой черезчур...


Название: Re: Потеря сигналов
Отправлено: LisandreL от Июнь 07, 2011, 15:46
У меня стоит Qt::DirectConnection, это хуже?
Да, это не рекомендуется. Более того, при таком коннекте код слота будет выполняться в вызывающем сигнал потоке, что при условии отсутствия у кода слота потокобезопасности может привести к самым непредсказуемым последствиям.


Название: Re: Потеря сигналов
Отправлено: Hvzh от Июнь 07, 2011, 15:49
Большое спасибо! Буду пробовать