| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] Qthread где какая нить? |
| Автор: null56 19.12.2008, 10:55 |
| Хотел узнать, правильно ли понимаю функционирование в классе Qthread Допустим у меня есть основная программа, в которой я определяю объект класса Qthread или его дочерний свой класс. Внутри класса есть метод start, который порождает нить, исполняемый код которого я реализую переопределяя функцию run()... то есть фактически нить создается только тогда, когда мною будет вызван метод start() Если вышесказаного мною верно, то тогда возникает небольшая непонятка.... Допустим класс Thread содержит в себе объект QSocket и сигнал от сокета соединен с каким - нибудь слотом класса Thread. В сокете происходит изменение и в слоте это где - нибудь фиксируется. Вопросы: обработкой слота будет заниматься основной поток, а не вторичный созданный в классе Thread? тогда подскажите, можно ли заставить вторичный поток обрабатывать сигналы от сокета, просто додуматься не могу, как это сделать? |
| Автор: null56 19.12.2008, 11:28 | ||||
| Сейчас читаю инфу, я так понял, что это можно реализовать через класс QEventLoop То есть в функции run() создать экземпляр этого класса
и запустить
Но как потом отлавливать события и каких обрабатывать от того же сокета? где переопределение надо сделать? связать их со слотами обработки... Сейчас меня интересует вопрос реализации |
| Автор: feanor59 19.12.2008, 13:00 |
| для того, чтобы распаралелить работы механизма сигнал/слотов, т. е. чтобы сигналы обрабатывались в том потоке, в котором определён слот, нужно запустить цикл выполнения в каждом таком потоке, для этого надо вызвать метод exec() в методе run(). |
| Автор: null56 19.12.2008, 15:40 |
| И больше ничего не надо, связь сигналов со слотами где определять надо? можно и в первичном потоке сделать? |
| Автор: null56 19.12.2008, 16:50 |
| А пример можно? я не совсем понимаю идею использования QEventLoop. Сигналы - то использовать нужно или нужно уже переопределять обработчики события? В общих чертах может кто - нибудь описать работу QEventLoop |
| Автор: feanor59 19.12.2008, 16:56 |
| больше ничего не надо. где связывать сигналы и слоты - не важно (если я не путаю). т. е. ты связал сигналы со слотами в потоке. запустил поток, в методе ран выполнился exec() и теперь сигналы будут обрабатываться в дочернем потоке (НО, вообще это очевидно, но на всякий случай, если ты будешь вызывать слот как обычный метод, то он будет выполнятся в контексте вызвавщего потока) |
| Автор: null56 22.12.2008, 12:36 | ||||||||
| Да идея понята.... Приведу пример моих экспериментов, который запускает в потоке дочерний eventloop, генерит сигнал, а потом закрывает eventloop Класс Thread
Thread.cpp
ну и собственно main.cpp
Собственно вывод в консоль
Большое спасибо, что помогли разобраться |
| Автор: null56 23.12.2008, 21:30 |
| правильный ответ видимо вот тут http://forum.vingrad.ru/forum/topic-241300/kw-qthread-movetothread-qsslsocket.html |