Russian Qt Forum
Ноябрь 02, 2024, 09:28
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Сигналы и массив
Страниц:
1
2
3
[
4
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Сигналы и массив (Прочитано 34328 раз)
serg_hd
Хакер
Offline
Сообщений: 668
Re: Сигналы и массив
«
Ответ #45 :
Декабрь 03, 2009, 20:59 »
Цитата: niXman от Декабрь 03, 2009, 20:51
Ну так это само-собой! Что, вопрос в этом? И вообще, в чем вопрос?
В том, что
Цитата: serg_hd от Декабрь 03, 2009, 20:12
load() у qwebview не выполняется несмотря на то, что метод лежит в классе gui, в схеме я указал где ERROR, говорит что потоки разные.
Записан
kubuntu/Win7/x64/NetBeans
spectre71
Гость
Re: Сигналы и массив
«
Ответ #46 :
Декабрь 03, 2009, 21:08 »
Цитата: serg_hd от Декабрь 03, 2009, 20:57
Цитата: Igors от Декабрь 03, 2009, 20:47
- отправить сигнал/событие от порожденной нитки к главной
Люди, кто-нибудь мою схему смотрел или я зря её рисовал? Есстессно, что сигнал я шлю от порождённой к главной!
Я смотрел.
Твоя схема - основана на твоей изначальной идее.
Ты посмотрел ссылку?
http://www.prog.org.ru/topic_10041_0.html
Она решает твою проблему!
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сигналы и массив
«
Ответ #47 :
Декабрь 03, 2009, 21:18 »
Сергей, мне кажется Вам надо выложить компилябельный упрощенный проект - а то обсуждение идет вхолостую
Записан
serg_hd
Хакер
Offline
Сообщений: 668
Re: Сигналы и массив
«
Ответ #48 :
Декабрь 03, 2009, 21:26 »
Цитата: Spectre от Декабрь 03, 2009, 21:08
Цитата: serg_hd от Декабрь 03, 2009, 20:57
Цитата: Igors от Декабрь 03, 2009, 20:47
- отправить сигнал/событие от порожденной нитки к главной
Люди, кто-нибудь мою схему смотрел или я зря её рисовал? Есстессно, что сигнал я шлю от порождённой к главной!
Я смотрел.
Твоя схема - основана на твоей изначальной идее.
Ты посмотрел ссылку?
http://www.prog.org.ru/topic_10041_0.html
Она решает твою проблему!
Пока нет, завтра займусь, спасибо, а то голова болит. Но схему делал на основе вами же изложенного, что там не так? Всё как говорили, всё также.
п.с. изначальная идея вообще была - массив потоков...
На всякий случай:
Есть 3 уровня потоков: основной, второй (клепающий рабочие потоки), и третий - собственно рабочие потоки, которых может быть великое множество.
1) Программа запускается (это 1й поток, в нём же есть метод methodSlot(), который будет клепать qwebview по требованию потоков 3го уровня). Нажимаю старт, после чего запускается 2й поток, происходит создание потоков 3го уровня и тут же делаю connect одного из сигналов потока 3го уровня с methodSlot() главного потока.
2) Касаемо потока 3го уровня: в нём создаются 2 сигнала, один - для запроса к главному потоку, к его методу methodSlot(), второй работает внутри него же (зачем он опишу ниже).
3) Когда запускается поток 3го уровня, он испускает 1й сигнал методу главного потока methodSlot(), где и создаётся qwebview.
4) Внутри methodSlot(): создаётся qwebview и QUrl - тут всё нормально. Но qwebview.load(QUrl) - тут ошибка о разных потоках(!!), хотя главный класс я передавал через конструктор во 2й поток для установки connect()'a между главным потоком и потоками 3го уровня! После того как проделались нужные операции(-я) выясняю кто поток-сендер (кто запросил эти операции(-цию) у главного потока) и вызываю метод этого сендера, на схеме он называется setData().
5) Внутри setData() испускается 2й сигнал (о котором я говорил что скажу), слот у которого находится в классе этого же потока 3го уровня, тут же. На схеме этот слот называется showResult(), он просто выдаёт текст о том, что load этого потока прошёл нормально.
Не знаю просто как ещё объяснить.
«
Последнее редактирование: Декабрь 03, 2009, 22:14 от serg_hd
»
Записан
kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
Offline
Сообщений: 668
Re: Сигналы и массив
«
Ответ #49 :
Декабрь 03, 2009, 22:49 »
Цитата: Spectre от Декабрь 03, 2009, 21:08
Твоя схема - основана на твоей изначальной идее.
Ты посмотрел ссылку?
http://www.prog.org.ru/topic_10041_0.html
Она решает твою проблему!
У меня, насколько я понял, так и работает. Разве что QWaitCondition не применял, а надо ли.
Записан
kubuntu/Win7/x64/NetBeans
niXman
Гость
Re: Сигналы и массив
«
Ответ #50 :
Декабрь 04, 2009, 07:22 »
Кстати. В блоге
SABROG
, есть такая статейка:
http://vingrad.ru/blogs/sabrog/2009/06/11/qt-45-movetothread-ili-metod-myunhgauzena/
Полагаю, ТС пригодится
Записан
spectre71
Гость
Re: Сигналы и массив
«
Ответ #51 :
Декабрь 04, 2009, 08:28 »
Цитата: niXman от Декабрь 04, 2009, 07:22
Кстати. В блоге
SABROG
, есть такая статейка:
http://vingrad.ru/blogs/sabrog/2009/06/11/qt-45-movetothread-ili-metod-myunhgauzena/
Полагаю, ТС пригодится
Вот именно, niXman он явно забыл сделать moveToThread()
Записан
niXman
Гость
Re: Сигналы и массив
«
Ответ #52 :
Декабрь 04, 2009, 08:30 »
Цитата: Spectre от Декабрь 04, 2009, 08:28
Цитата: niXman от Декабрь 04, 2009, 07:22
Кстати. В блоге
SABROG
, есть такая статейка:
http://vingrad.ru/blogs/sabrog/2009/06/11/qt-45-movetothread-ili-metod-myunhgauzena/
Полагаю, ТС пригодится
Вот именно, niXman он явно забыл сделать moveToThread()
или сделал fork()...безвозвратно
А если по существу, то я что-то не понимаю в чем проблема на данный момент
Еще с первого поста, решение было очевидно. В разделе ГУИ(
http://www.prog.org.ru/topic_11481_0.html
) я описал и реализовал подобный алгоритм. И все работает. Чем эта задача радикально отличается от той? - да ни чем! Просто дополнительные потоки в которых крутиться сам алгоритм сценария. ВСЁ! И еще мне не понятно, зачем для каждого перехода по ссылке, заново создавать WebView? У него же есть метод load(url), который собственно говоря для этого и предназначен.
Еще есть мнение, что вопрос на столько прост, что разум отказывается поверить в то, что могут существовать такие вопросы. Ну не будем отвлекаться и оффтопить
«
Последнее редактирование: Декабрь 04, 2009, 08:44 от niXman
»
Записан
spectre71
Гость
Re: Сигналы и массив
«
Ответ #53 :
Декабрь 04, 2009, 08:50 »
Цитата: serg_hd от Декабрь 03, 2009, 22:49
Цитата: Spectre от Декабрь 03, 2009, 21:08
Твоя схема - основана на твоей изначальной идее.
Ты посмотрел ссылку?
http://www.prog.org.ru/topic_10041_0.html
Она решает твою проблему!
У меня, насколько я понял, так и работает. Разве что QWaitCondition не применял, а надо ли.
Если у тебя нет QWaitCondition, то так как сделано у меня работать не может.
Когда хорош описанный метод:
В случае когда требуется именно синхронизация с главным потоком. Therad вызывает метод
в контексте главного потока
и
ожидает его завершения
. Как раз то что тебе нужно. Не нужно посылать данные главному потоку, а потом крутиться вхолостую и ждать ответа, можно сразу выполнить нужный метод в контексте главного потока и по его завершению продолжить обработку в Therad.
Чем хорош описанный метод:
- не требует запуска exec для организации цикла сообщений
- не требуется дополнительная межпотоковая синхронизация обращения к предаваемым/принимаемым данным во время исполнения синхронизованного метода.
Записан
serg_hd
Хакер
Offline
Сообщений: 668
Re: Сигналы и массив
«
Ответ #54 :
Декабрь 04, 2009, 12:06 »
Цитата: Spectre от Декабрь 04, 2009, 08:28
Вот именно, niXman он явно забыл сделать moveToThread()
Об этом ни слова не говорилось до этого.
Всё равно народ не понял в чём проблема. Повторюсь в 3(или 4?) раз: Не работает метод load() в главном потоке, никуда мне этот qwebview передавать не надо! На схеме я отсылаю в 3й поток значение bool!!!
«
Последнее редактирование: Декабрь 04, 2009, 12:08 от serg_hd
»
Записан
kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
Offline
Сообщений: 668
Re: Сигналы и массив
«
Ответ #55 :
Декабрь 04, 2009, 14:53 »
как оказалось, в qt этот принцип работает, в jambi нет
Записан
kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
Offline
Сообщений: 668
Re: Сигналы и массив
«
Ответ #56 :
Декабрь 04, 2009, 22:10 »
Гемор позади. Проблема была решена тем, что в главном потоке использовал QWebPage + везде ConnectionType.QueuedConnection (в инете решения так и не встретил):
Код
Java
QWebPage page
=
new
QWebPage
(
)
;
page.
currentFrame
(
)
.
load
(
new
QUrl
(
"http://google.com/"
)
)
;
Надеюсь, его load() асинхронен и QWebPage ведёт себя как и QWebView - прорисовывает js, html и т.п.
Записан
kubuntu/Win7/x64/NetBeans
Страниц:
1
2
3
[
4
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...