Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
BRE |
9.12.2009, 10:41
Сообщение
#31
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(OrSOn @ 9.12.2009, 10:37) Link Так вот в signalReceived() он не заходит... Так в потоке не запущен цикл обработки событий (QThread::exec). Все сигналы между потоками ходят через события, а если события не обрабатываются, то и сигналы не доходят. |
|
|
|
|
OrSOn |
9.12.2009, 10:51
Сообщение
#32
|
|
Студент ![]() Группа: Участник Сообщений: 46 Регистрация: 8.12.2009 Пользователь №: 1289 Спасибо сказали: 0 раз(а) Репутация: 0
|
Хммм но ведь если я в потоке вызову exec(), то на нем выполнение потока остановится, до полезных команд не дойдет. Если не сложно, хотелось бы увидеть простенький пример, как передавать сигналы в поток... Коненчо, туда-то сигналы можно не передавать, можно обойтись функциями, ибо доступ к потокам у меня свободный, но хочется разобраться на будущее...
|
|
|
|
|
BRE |
9.12.2009, 11:05
Сообщение
#33
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(OrSOn @ 9.12.2009, 10:51) Link Хммм но ведь если я в потоке вызову exec(), то на нем выполнение потока остановится, до полезных команд не дойдет. Если не сложно, хотелось бы увидеть простенький пример, как передавать сигналы в поток... Коненчо, туда-то сигналы можно не передавать, можно обойтись функциями, ибо доступ к потокам у меня свободный, но хочется разобраться на будущее... Я не поклонник такого использования сигналов в потоках, проще и IMHO лучше, не держать поток в простое на каком то флажке, а запускать его в тот момент, когда нужно что-бы он что-то сделал. После завершения работы она завершиться и все. Но если очень хочется, то можно делать примерно так: Раскрывающийся текст Если соединится со слотами job1 и job2 из другого потока, то при активации они будут выполняться в контексте потока. Т.е. нет нужды ждать в потоке изменение какого-то флага и запускать действие, QThread::exec сам будет ждать сигнала и запустит действие (нужный слот). Сообщение отредактировал BRE - 9.12.2009, 11:06 |
|
|
|
|
OrSOn |
9.12.2009, 11:08
Сообщение
#34
|
|
Студент ![]() Группа: Участник Сообщений: 46 Регистрация: 8.12.2009 Пользователь №: 1289 Спасибо сказали: 0 раз(а) Репутация: 0
|
Спасибо огромное! Сейчас испытаю. А запущенные и простаивающие потоки, увы, нужны мне... Потому что, во-первых, у меня стоит ограничение на количество запущенных потоков, а во-вторых, 1 событие может вызвать несколько сотен обращений к потоку, так что лучше пусть он будет уже готов и не придется создавать несколько сотен новых потоков, удаляя их через короткое время...
|
|
|
|
|
BRE |
9.12.2009, 11:13
Сообщение
#35
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44
|
Цитата(OrSOn @ 9.12.2009, 11:08) Link Спасибо огромное! Сейчас испытаю. А запущенные и простаивающие потоки, увы, нужны мне... Потому что, во-первых, у меня стоит ограничение на количество запущенных потоков, а во-вторых, 1 событие может вызвать несколько сотен обращений к потоку, так что лучше пусть он будет уже готов и не придется создавать несколько сотен новых потоков, удаляя их через короткое время... Если задачи таковы, то конечно нужно использовать... Посмотри еще на QThreadPool. |
|
|
|
|
OrSOn |
9.12.2009, 11:16
Сообщение
#36
|
|
Студент ![]() Группа: Участник Сообщений: 46 Регистрация: 8.12.2009 Пользователь №: 1289 Спасибо сказали: 0 раз(а) Репутация: 0
|
К сожалению, у меня Qt 4.3, там его еще нету, но все равно гляну, спасибо!
|
|
|
|
|
Litkevich Yuriy |
9.12.2009, 11:43
Сообщение
#37
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94
|
Цитата(OrSOn @ 9.12.2009, 12:51) Link не совсем понял, к чему это? Ведь отдельно int в сигнале передается, отдельно QTcpSocket * передается, а в структуре вместе не хотят... из описания к макросу Q_DECLARE_METATYPE ( Type ):Цитата Note that if you intend to use the type in queued signal and slot connections, you also have to call qRegisterMetaType() since such connections are resolved at runtime.
|
|
|
|
|
OrSOn |
9.12.2009, 11:55
Сообщение
#38
|
|
Студент ![]() Группа: Участник Сообщений: 46 Регистрация: 8.12.2009 Пользователь №: 1289 Спасибо сказали: 0 раз(а) Репутация: 0
|
Ясно, спасибо =)
|
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 25.12.2025, 16:48 |