Многопоточность в Qt, Проблемы с QThread |
Здравствуйте, гость ( Вход | Регистрация )
Многопоточность в Qt, Проблемы с QThread |
silart |
4.6.2008, 8:06
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 31.3.2008 Пользователь №: 138 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день! Подскажите пожалуйста, кто работал с QThread, каким образом сделать так, чтобы сигналы объекта обрабатывались пользовательским потоком, а не потоком графического интерфейса. Вот у Шлее есть 2 примера:
Первый:
Второй:
Как сделать так, чтобы слот slotNextValue() обрабатывался потоком MyThread? В примерах этот слот обрабатывается главным потоком. Есть еще функция moveToThread(), но с ней ничего вообще не получается, в слот не попадает ни один поток... |
|
|
sploid |
4.6.2008, 14:21
Сообщение
#2
|
Студент Группа: Участник Сообщений: 51 Регистрация: 26.2.2008 Из: Москва Пользователь №: 106 Спасибо сказали: 10 раз(а) Репутация: 1 |
если я правильно понял вопрос, то должно быть так ( не тестил ):
а сигнал finished QThread сам генерит при завершении потока. |
|
|
alexondi |
11.6.2008, 23:03
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 1 Регистрация: 11.6.2008 Пользователь №: 199 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вообщем ситуация с потоками слотами в них такая.
Для того чтобы поток мог отрабатывать сигналы от других потоков (что одно и то же - обработка сигналов и слотов объектов в которых находятся объекты ) НЕОБХОДИМО: 1. в поток добавить QEventLoop - это основной механизм через который идет передача сообщений QEvent's а сигналы реализованы как раз с помощью них зы можно сделать локальной переменной в методе run а можно и членом класса - на выбор 2. сам поток необходимо поместить сам в себя т.е. сделать в конструкторе this->moveToThread(this); 3. реализовать м методе run что-то вроде этого
ВСЕ! Теперь все слоты данного потока (а также всех объектов для которых будет вызван метод moveToThread(ref_THREAD) будут выполняться в этом потоке а не в основном. Сам поток тоже может иметь и сигналы и слоты Сообщение отредактировал Litkevich Yuriy - 12.6.2008, 3:32
Причина редактирования: для наглядности используйте тэг code=cpp
|
|
|
AD |
16.6.2008, 9:59
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 2003 Регистрация: 4.2.2008 Из: S-Petersburg Пользователь №: 84 Спасибо сказали: 70 раз(а) Репутация: 17 |
Есть небольшой вопросик на счет QEventLoop! Прочитал про этот класс в хелпе и не понял его предназначения, можете пояснить своими словами, пожалуйста? Предназначен обработки в цикле событий или что?
|
|
|
Текстовая версия | Сейчас: 4.12.2024, 8:57 |