Russian Qt Forum
Ноябрь 23, 2024, 06:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Потеря сигналов  (Прочитано 2817 раз)
Hvzh
Гость
« : Июнь 07, 2011, 14:47 »

Есть у меня многопоточное приложение. Один из потоков занимается приемом данных от сервера. При обрыве связи поток генерирует сигнал основному потоку, однако получается так, что если я генерю его только раз, он обычно теряется почему-то, то есть, не доходит до основного потока. Только если я начинаю генерить его в цикле, основной поток его получает раз на двадцатый. С чем это может быть связано? Если у меня, например, в основном потоке вызывается некая ресурсоемкая функция, работающая относительно продолжительное время, а во время ее работы поток генерит сигнал. Не может ли сигнал потеряться не дождавшись окончания работы этой функции?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Июнь 07, 2011, 15:03 »

Сигналы из-за ресурсоёмкой функции теряться не должны, но должны приходить по завершении функции, если конечно у вас не вызывается обработчик событий внутри функции.
Скорее всего вы что-то делаете не так.
Для уверенности поставьте Qt::QueuedConnection в явном виде.
Ну и код прикладывайте, когда что-то спрашиваете.
Записан
Hvzh
Гость
« Ответ #2 : Июнь 07, 2011, 15:38 »

Сигналы из-за ресурсоёмкой функции теряться не должны, но должны приходить по завершении функции, если конечно у вас не вызывается обработчик событий внутри функции.
Скорее всего вы что-то делаете не так.
Для уверенности поставьте Qt::QueuedConnection в явном виде.
Ну и код прикладывайте, когда что-то спрашиваете.
У меня стоит Qt::DirectConnection, это хуже?
Код, зараза, большой черезчур...
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Июнь 07, 2011, 15:46 »

У меня стоит Qt::DirectConnection, это хуже?
Да, это не рекомендуется. Более того, при таком коннекте код слота будет выполняться в вызывающем сигнал потоке, что при условии отсутствия у кода слота потокобезопасности может привести к самым непредсказуемым последствиям.
« Последнее редактирование: Июнь 07, 2011, 15:49 от LisandreL » Записан
Hvzh
Гость
« Ответ #4 : Июнь 07, 2011, 15:49 »

Большое спасибо! Буду пробовать
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.125 секунд. Запросов: 22.