Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
OrSOn |
8.12.2009, 15:18
Сообщение
#1
|
|
Студент ![]() Группа: Участник Сообщений: 46 Регистрация: 8.12.2009 Пользователь №: 1289 Спасибо сказали: 0 раз(а) Репутация: 0
|
Добрый день всем! Столкнулся со следующей проблемой... Есть программа, в которой нужно использовать потоки, причем основной поток должен обмениваться сигналами с вновь созданными. Так вот проблема примерно в следующем:
Попробовал просто все подключить коннектами, в результате thread принимает мои сигналы, но сам их испускать не может. Попробовал в начале run() вписывать exec(), в результате до нужного участка кода, разумеется, поток не доходил Попробовал способ с moveToThread(), сделал примерно следующее: При этом поток вообще не видит испускаемых мной сигналов. Подскажите, пожалуйста, что именно делаю не так и как заставить все это дело нормально взаимодействовать. |
|
|
|
|
Andrewshkovskii |
8.12.2009, 15:21
Сообщение
#2
|
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 351 Регистрация: 27.12.2008 Пользователь №: 467 Спасибо сказали: 18 раз(а) Репутация: 1
|
У Саборга в блоге, что-то такого было, вроде это :
Link |
|
|
|
|
OrSOn |
8.12.2009, 15:28
Сообщение
#3
|
|
Студент ![]() Группа: Участник Сообщений: 46 Регистрация: 8.12.2009 Пользователь №: 1289 Спасибо сказали: 0 раз(а) Репутация: 0
|
Увы, это не то( Там написано, что сигналы из run() нормально обрабатываются... А у меня основной поток их ВООБЩЕ не видит...
|
|
|
|
|
BRE |
8.12.2009, 15:31
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(OrSOn @ 8.12.2009, 15:28) Link Увы, это не то( Там написано, что сигналы из run() нормально обрабатываются... А у меня основной поток их ВООБЩЕ не видит... Так ты бы кода побольше показал... Что там в run у тебя, как отсылаешь, как принимаешь... |
|
|
|
|
OrSOn |
8.12.2009, 15:36
Сообщение
#5
|
|
Студент ![]() Группа: Участник Сообщений: 46 Регистрация: 8.12.2009 Пользователь №: 1289 Спасибо сказали: 0 раз(а) Репутация: 0
|
Ну внутри рана у меня следующее:
setSocketFlag у меня задается в слоте, который принимает сигнал от основного потока. Т.е. ран крутится, пока основной поток не передаст сигнал. Передал, попали в функцию setThreadSocketFn(). Внутри этой функции ведется некоторая обработка, после чего написано: emit endThreadSocket( PrioritySocket ); как написано выше, в основном потоке идет привязка этого сигнала к слоту... но внутрь слота я так и не попадаю, такое ощущение, что слот не испускается...
Причина редактирования: используй тэг code
|
|
|
|
|
BRE |
8.12.2009, 15:54
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(OrSOn @ 8.12.2009, 15:36) Link как написано выше, в основном потоке идет привязка этого сигнала к слоту... но внутрь слота я так и не попадаю, такое ощущение, что слот не испускается... Набросал небольшой рабочий пример: Раскрывающийся текст |
|
|
|
|
OrSOn |
8.12.2009, 15:57
Сообщение
#7
|
|
Студент ![]() Группа: Участник Сообщений: 46 Регистрация: 8.12.2009 Пользователь №: 1289 Спасибо сказали: 0 раз(а) Репутация: 0
|
В том и проблема, что суть та же, но у меня не принимаются сигналы, хоть ты тресни...
|
|
|
|
|
BRE |
8.12.2009, 16:02
Сообщение
#8
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(OrSOn @ 8.12.2009, 15:36) Link Т.е. ран крутится, пока основной поток не передаст сигнал. Передал, попали в функцию setThreadSocketFn(). Внутри этой функции ведется некоторая обработка, после чего написано: А в setThreadSocketFn точно попадаешь? |
|
|
|
|
OrSOn |
8.12.2009, 16:07
Сообщение
#9
|
|
Студент ![]() Группа: Участник Сообщений: 46 Регистрация: 8.12.2009 Пользователь №: 1289 Спасибо сказали: 0 раз(а) Репутация: 0
|
Да. Попробовал только что вообще просто все сделать... В своем основном потоке объявляю thread
Т.е. ТОЛЬКО запустил конструктор и вошел в ран(). Ран описан очень просто: Так вот тот самый эмит он проходит непрерывно, но в слот socketToList( PrioritySocket ) упорно отказывается попадать. Причем если тот же сигнал испустить ВНЕ функции ран(), все отлично перехватывается... |
|
|
|
|
BRE |
8.12.2009, 16:11
Сообщение
#10
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(OrSOn @ 8.12.2009, 16:07) Link Так вот тот самый эмит он проходит непрерывно, но в слот socketToList( PrioritySocket ) упорно отказывается попадать. Причем если тот же сигнал испустить ВНЕ функции ран(), все отлично перехватывается... Очередь сообщений QApplication запущена? |
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 28.12.2025, 1:55 |