![]() |
|
|
![]()
|
|
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
Хотел узнать, правильно ли понимаю функционирование в классе Qthread
Допустим у меня есть основная программа, в которой я определяю объект класса Qthread или его дочерний свой класс. Внутри класса есть метод start, который порождает нить, исполняемый код которого я реализую переопределяя функцию run()... то есть фактически нить создается только тогда, когда мною будет вызван метод start() Если вышесказаного мною верно, то тогда возникает небольшая непонятка.... Допустим класс Thread содержит в себе объект QSocket и сигнал от сокета соединен с каким - нибудь слотом класса Thread. В сокете происходит изменение и в слоте это где - нибудь фиксируется. Вопросы: обработкой слота будет заниматься основной поток, а не вторичный созданный в классе Thread? тогда подскажите, можно ли заставить вторичный поток обрабатывать сигналы от сокета, просто додуматься не могу, как это сделать? |
|||
|
||||
| null56 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
Сейчас читаю инфу, я так понял, что это можно реализовать через класс QEventLoop
То есть в функции run() создать экземпляр этого класса
и запустить
Но как потом отлавливать события и каких обрабатывать от того же сокета? где переопределение надо сделать? связать их со слотами обработки... Сейчас меня интересует вопрос реализации |
||||
|
|||||
| feanor59 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 24.1.2008 Где: Пермь Репутация: нет Всего: нет |
для того, чтобы распаралелить работы механизма сигнал/слотов, т. е. чтобы сигналы обрабатывались в том потоке, в котором определён слот, нужно запустить цикл выполнения в каждом таком потоке, для этого надо вызвать метод exec() в методе run().
|
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
И больше ничего не надо, связь сигналов со слотами где определять надо? можно и в первичном потоке сделать?
|
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
А пример можно? я не совсем понимаю идею использования QEventLoop. Сигналы - то использовать нужно или нужно уже переопределять обработчики события?
В общих чертах может кто - нибудь описать работу QEventLoop |
|||
|
||||
| feanor59 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 66 Регистрация: 24.1.2008 Где: Пермь Репутация: нет Всего: нет |
больше ничего не надо. где связывать сигналы и слоты - не важно (если я не путаю).
т. е. ты связал сигналы со слотами в потоке. запустил поток, в методе ран выполнился exec() и теперь сигналы будут обрабатываться в дочернем потоке (НО, вообще это очевидно, но на всякий случай, если ты будешь вызывать слот как обычный метод, то он будет выполнятся в контексте вызвавщего потока) |
|||
|
||||
| null56 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
Да идея понята.... Приведу пример моих экспериментов, который запускает в потоке дочерний eventloop, генерит сигнал, а потом закрывает eventloop
Класс Thread
Thread.cpp
ну и собственно main.cpp
Собственно вывод в консоль
Большое спасибо, что помогли разобраться |
||||||||
|
|||||||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: 6 Всего: 12 |
||||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |