Russian Qt Forum
Ноябрь 26, 2024, 12:34
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
QThread генерирует ошибку до начала выполнения
Страниц:
1
[
2
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QThread генерирует ошибку до начала выполнения (Прочитано 9392 раз)
Dendy
Гость
Re: QThread генерирует ошибку до начала выполнения
«
Ответ #15 :
Январь 13, 2010, 22:04 »
Принадлежность к потоку обьектов вообще и сокета в частности определяется тем, в что этом потоке будут дёргаться виртуальный метод QObject::event(). Создавайте сокет внутри своего run() - это сделает его принадлежащим потоку, которому этот run() принадлежит.
Записан
foxexe
Гость
Re: QThread генерирует ошибку до начала выполнения
«
Ответ #16 :
Январь 13, 2010, 22:18 »
ну да значит я всё правильно думаю, спасибо огромное
смотря на тему становится даже немного стыдно)
Записан
Dendy
Гость
Re: QThread генерирует ошибку до начала выполнения
«
Ответ #17 :
Январь 13, 2010, 22:24 »
Да ладно, работа с потоками - то ещё болото. И никакая теория не будет полноценной, пока сам в нём не искупаешься.
Записан
BlackTass
Гость
Re: QThread генерирует ошибку до начала выполнения
«
Ответ #18 :
Январь 13, 2010, 22:28 »
можно создавать и в конструкторе, главное только потом перенести с помощью метода moveToThread() (метод класса QObject). Вызывать его надо из того потока, где был создан объект. И не забудьте объект самого потока перенести в этот поток.
Записан
Dendy
Гость
Re: QThread генерирует ошибку до начала выполнения
«
Ответ #19 :
Январь 13, 2010, 22:36 »
Цитата: BlackTass от Январь 13, 2010, 22:28
И не забудьте объект самого потока перенести в этот поток.
Сильно сомнительный подход, от которого больше проблем. Лучше так не делать. Как минимум события потока, а следовательно и слоты, не будут обрабатываться до и после exec().
Записан
foxexe
Гость
Re: QThread генерирует ошибку до начала выполнения
«
Ответ #20 :
Январь 13, 2010, 22:40 »
Цитата: Dendy от Январь 13, 2010, 22:24
Да ладно, работа с потоками - то ещё болото. И никакая теория не будет полноценной, пока сам в нём не искупаешься.
да это я абсолютно согласен. Мне хватило даже институтских прог сначала винда, потом соляра, и там эти вещи побезопасней для потоков сделаны вроде.
Цитата: BlackTass от Январь 13, 2010, 22:28
можно создавать и в конструкторе, главное только потом перенести с помощью метода moveToThread() (метод класса QObject). Вызывать его надо из того потока, где был создан объект. И не забудьте объект самого потока перенести в этот поток.
очень хорошо подмечено, я и забыл про moveToThread(). однако это не решает моей архитектурной проблемы обработки приёма и отправки в разных потоках. ладно буду думать что тут делать.
А зачем мне переносить объект потока к себе в поток?
Записан
BlackTass
Гость
Re: QThread генерирует ошибку до начала выполнения
«
Ответ #21 :
Январь 13, 2010, 22:45 »
Цитата: Dendy от Январь 13, 2010, 22:36
Сильно сомнительный подход, от которого больше проблем. Лучше так не делать. Как минимум события потока, а следовательно и слоты, не будут обрабатываться до и после exec().
ну после exec() в большинстве случаев наступает смерть потока.
Зато такой подход позволяет отделить обработку слотов объекта потока от потока-родителя (примерно в половине случаев это гуй-поток), что соответственно разгружает его.
Хотя вы правы, я погорячился советовать это делать всегда. Нужно понимать к чему приведет такое и для чего это нужно.
«
Последнее редактирование: Январь 13, 2010, 22:46 от BlackTass
»
Записан
Dendy
Гость
Re: QThread генерирует ошибку до начала выполнения
«
Ответ #22 :
Январь 13, 2010, 22:55 »
Цитата: foxexe от Январь 13, 2010, 22:40
А зачем мне переносить объект потока к себе в поток?
Как правило в run() создаётся нечто, что будет там жить и ловить события. Поток засовывают сам в себя когда лень создавать новый класс-обработчик, наследник QObject. Однако такой подход рвёт всё управление событиями/слотами экземпляром потока извне и влечёт ошибки на пустом месте. Технически никакого преимущества, кроме того, что два класса смешаны в один. И да, фильтр событий тоже не будет работать между потоками, зачем так сделано в Qt мне непонять.
Записан
BlackTass
Гость
Re: QThread генерирует ошибку до начала выполнения
«
Ответ #23 :
Январь 13, 2010, 23:59 »
Цитата: Dendy от Январь 13, 2010, 22:55
Однако такой подход рвёт всё управление событиями/слотами экземпляром потока извне и влечёт ошибки на пустом месте. Технически никакого преимущества, кроме того, что два класса смешаны в один.
Ну по сути да, удобство только в исключении класса. Ну и в отстутствии пробросов сигнал-сигнал-слот для необходимых снаружи слотов, которые должны испольняться в отдельном евентлупе
Записан
Страниц:
1
[
2
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...