Russian Qt Forum
Май 02, 2024, 23:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4]   Вниз
  Печать  
Автор Тема: Сигналы и массив  (Прочитано 32644 раз)
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #45 : Декабрь 03, 2009, 20:59 »

Ну так это само-собой! Что, вопрос в этом? И вообще, в чем вопрос?
В том, что
load() у qwebview не выполняется несмотря на то, что метод лежит в классе gui, в схеме я указал где ERROR, говорит что потоки разные.
Записан

kubuntu/Win7/x64/NetBeans
spectre71
Гость
« Ответ #46 : Декабрь 03, 2009, 21:08 »

- отправить сигнал/событие от порожденной нитки к главной
Люди, кто-нибудь мою схему смотрел или я зря её рисовал? Есстессно, что сигнал я шлю от порождённой к главной!

Я смотрел.
Твоя схема  - основана на твоей изначальной идее.
Ты посмотрел ссылку?
http://www.prog.org.ru/topic_10041_0.html
Она решает твою проблему!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #47 : Декабрь 03, 2009, 21:18 »

Сергей, мне кажется Вам надо выложить компилябельный упрощенный проект - а то обсуждение идет вхолостую
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #48 : Декабрь 03, 2009, 21:26 »

- отправить сигнал/событие от порожденной нитки к главной
Люди, кто-нибудь мою схему смотрел или я зря её рисовал? Есстессно, что сигнал я шлю от порождённой к главной!

Я смотрел.
Твоя схема  - основана на твоей изначальной идее.
Ты посмотрел ссылку?
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 Offline

Сообщений: 668



Просмотр профиля
« Ответ #49 : Декабрь 03, 2009, 22:49 »

Твоя схема  - основана на твоей изначальной идее.
Ты посмотрел ссылку?
http://www.prog.org.ru/topic_10041_0.html
Она решает твою проблему!
У меня, насколько я понял, так и работает. Разве что QWaitCondition  не применял, а надо ли.
Записан

kubuntu/Win7/x64/NetBeans
niXman
Гость
« Ответ #50 : Декабрь 04, 2009, 07:22 »

Кстати. В блоге SABROG, есть такая статейка: http://vingrad.ru/blogs/sabrog/2009/06/11/qt-45-movetothread-ili-metod-myunhgauzena/
Полагаю, ТС пригодится Подмигивающий
Записан
spectre71
Гость
« Ответ #51 : Декабрь 04, 2009, 08:28 »

Кстати. В блоге SABROG, есть такая статейка: http://vingrad.ru/blogs/sabrog/2009/06/11/qt-45-movetothread-ili-metod-myunhgauzena/
Полагаю, ТС пригодится Подмигивающий

Вот именно, niXman он явно забыл сделать moveToThread()  Улыбающийся
Записан
niXman
Гость
« Ответ #52 : Декабрь 04, 2009, 08:30 »

Кстати. В блоге 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
Гость
« Ответ #53 : Декабрь 04, 2009, 08:50 »

Твоя схема  - основана на твоей изначальной идее.
Ты посмотрел ссылку?
http://www.prog.org.ru/topic_10041_0.html
Она решает твою проблему!
У меня, насколько я понял, так и работает. Разве что QWaitCondition  не применял, а надо ли.

Если у тебя нет QWaitCondition, то так как сделано у меня работать не может.
Когда хорош описанный метод:
В случае когда требуется именно синхронизация с главным потоком. Therad вызывает метод в контексте главного потока и ожидает его завершения.  Как раз то что тебе нужно. Не нужно посылать данные главному потоку, а потом крутиться вхолостую и ждать ответа, можно сразу выполнить нужный метод в контексте главного потока и по его завершению продолжить обработку в Therad.

Чем хорош описанный метод:
- не требует запуска exec для организации цикла сообщений
- не требуется дополнительная межпотоковая синхронизация обращения к предаваемым/принимаемым данным во время исполнения синхронизованного метода.



Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #54 : Декабрь 04, 2009, 12:06 »

Вот именно, niXman он явно забыл сделать moveToThread()  Улыбающийся
Об этом ни слова не говорилось до этого.
Всё равно народ не понял в чём проблема. Повторюсь в 3(или 4?) раз: Не работает метод load() в главном потоке, никуда мне этот qwebview передавать не надо! На схеме я отсылаю в 3й поток значение bool!!!
« Последнее редактирование: Декабрь 04, 2009, 12:08 от serg_hd » Записан

kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #55 : Декабрь 04, 2009, 14:53 »

как оказалось, в qt этот принцип работает, в jambi нет
Записан

kubuntu/Win7/x64/NetBeans
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #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]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.401 секунд. Запросов: 22.