Qthread & сигналы |
Здравствуйте, гость ( Вход | Регистрация )
Qthread & сигналы |
BRE |
9.12.2009, 10:41
Сообщение
#31
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
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 |
Хммм но ведь если я в потоке вызову 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 |
Спасибо огромное! Сейчас испытаю. А запущенные и простаивающие потоки, увы, нужны мне... Потому что, во-первых, у меня стоит ограничение на количество запущенных потоков, а во-вторых, 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 |
не совсем понял, к чему это? Ведь отдельно 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 |
Ясно, спасибо =)
|
|
|
Текстовая версия | Сейчас: 18.1.2025, 16:17 |