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

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

Страниц: 1 ... 3 4 [5] 6   Вниз
  Печать  
Автор Тема: Создание/вызов методов в разных потоках.  (Прочитано 45159 раз)
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #60 : Ноябрь 29, 2009, 16:49 »

всё там прыгает как надо, но это только загрузка, она бесполезна, нужен отдельный поток, чтобы работать с каждой загруженной страницей (считывать правила работы со страницей например из файла, ставить задержки и т.п. и т.д.). Надо всё же попробовать WebPage и QWebFrame, вдруг покатит, завтра попробую, а то выходной всё-таки.
Записан

kubuntu/Win7/x64/NetBeans
niXman
Гость
« Ответ #61 : Ноябрь 29, 2009, 16:55 »

niXman, в run()'e у тебя только испускание сигналов и коннекты, это только частичная многопоточность. А то что на видео - просто демонстрация асинхронной работы load(), не многопоточность это. А ведь работать может понадобиться с каждой загруженной страницей отдельно и методы работы с ними будут разные, 100% не асинхронные грубо говоря.
вот если бы я впихнул цикл распределения заданий в основной поток, то да, однопоточность. и ГУИ в этом случае практически не прорисовывается(понятно почему), проверено.
Записан
spectre71
Гость
« Ответ #62 : Ноябрь 29, 2009, 17:00 »

Это все хорошо.
Но я писал:

Но есть проблема!
Может этого и нельзя сделать!  Непонимающий

WebPage - обязан создаваться в главном потоке, поскольку его родителем будет QWebView

Цитировать
The child of a QObject must always be created in the thread where the parent was created.

Родителем WebFrame является WebPage, все нормально.
Предаем его в другой поток, вызываем там WebFrame::load.
И наш WebFrame при загрузке создает у себя дочерние QWebFrame !!! Что недопустимо, они должны быть созданы в главном потоке!

Никто на это ничего не ответил.
Либо я ошибаюсь, либо загружать в WebFrame можно только в главном потоке!
Записан
serg_hd
Хакер
*****
Offline Offline

Сообщений: 668



Просмотр профиля
« Ответ #63 : Ноябрь 29, 2009, 17:06 »

Либо я ошибаюсь, либо загружать в WebFrame можно только в главном потоке!
Это конечно плохо. Но лично я не ответил, т.к. не пробовал, попробую - отпишусь, другого варианта всё равно нет, что касается qt jambi конечно.
Записан

kubuntu/Win7/x64/NetBeans
BRE
Гость
« Ответ #64 : Ноябрь 29, 2009, 17:08 »

Никто на это ничего не ответил.
Либо я ошибаюсь, либо загружать в WebFrame можно только в главном потоке!
Я это только предположил, проверять не буду - лень/надоело, подожду результаты заинтересованных лиц.  Улыбающийся
Записан
niXman
Гость
« Ответ #65 : Ноябрь 29, 2009, 17:23 »

Никто на это ничего не ответил.
Либо я ошибаюсь, либо загружать в WebFrame можно только в главном потоке!
думаю это вполне выполнимо. но нужно ковыряться во внутренностях QWebView. чем и занимаюсь.
Записан
niXman
Гость
« Ответ #66 : Ноябрь 29, 2009, 17:25 »

Кто-нибудь, подскажите, где есть диаграмма наследования Qt ?
Записан
spectre71
Гость
« Ответ #67 : Ноябрь 29, 2009, 17:28 »

Либо я ошибаюсь, либо загружать в WebFrame можно только в главном потоке!
Это конечно плохо. Но лично я не ответил, т.к. не пробовал, попробую - отпишусь, другого варианта всё равно нет, что касается qt jambi конечно.

Просто попробовать здесь может не помочь. В данной ситуации на тестах все может прокататить, а упадет неизвестно когда и тогда уже даже не поймешь что связано с этой проблемой.
Надо сперва разобраться.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #68 : Ноябрь 29, 2009, 17:30 »

Кто-нибудь, подскажите, где есть диаграмма наследования Qt ?

см. Class Inheritance Hierarchy
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
spectre71
Гость
« Ответ #69 : Ноябрь 29, 2009, 17:31 »

Кто-нибудь, подскажите, где есть диаграмма наследования Qt ?

Assistant:
Qt Reference Documentation->API Reference->Class Chart
Записан
niXman
Гость
« Ответ #70 : Ноябрь 29, 2009, 17:42 »

А ведь работать может понадобиться с каждой загруженной страницей отдельно и методы работы с ними будут разные, 100% не асинхронные грубо говоря.
Да, в этом случае, моим методом не обойтись. Но я же не это проверял. Просто продемонстрировал возможность одновременной работы вьюшек с распределением заданий из одного потока.

А если алгоритм работы с содержимым вьюшек синхронный, значит его в поток. Но вьюшки пихать в тот же поток не за чем!

1. для каждой вьюшки отдельный поток в котором реализован алгоритм.
2. сигналы и слоты этого потока соединяются с этой вьюшкой.
3. так как каждый сценарий выполняется в отдельной потоке, нам нужно декларировать в нем один сигнал, и один слот.
3.1 signalRunScenarie(scenarie);
3.2 slotScenarieFinish(bool);

как-то так Подмигивающий
« Последнее редактирование: Ноябрь 29, 2009, 17:49 от niXman » Записан
niXman
Гость
« Ответ #71 : Ноябрь 29, 2009, 17:48 »

Spectre, pastor
спасибо.

Кстати в моем примере, на одном ядре 2.3 ггц, для 100% загрузки, нужно запустить 370 вьюшек. памяти съедает 690 метров. Что вполне нормально. Так что если распараллелить программу на несколько ядер, то даже гугл позавидует  Смеющийся
« Последнее редактирование: Ноябрь 29, 2009, 18:09 от niXman » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #72 : Ноябрь 29, 2009, 18:35 »

Кстати в моем примере, на одном ядре 2.3 ггц, для 100% загрузки, нужно запустить 370 вьюшек. памяти съедает 690 метров. Что вполне нормально. Так что если распараллелить программу на несколько ядер, то даже гугл позавидует  Смеющийся
Приятно видеть приличный объем Улыбающийся Но на одном ядре есть подлянка: часто оно "работает" с нитками, все нормально. А когда запускаем там где физически 2 или более процессора - оно валится. Надо как-то отладить, приходится проситься к кому-то на машину - а это никому не приятно и.т.п.  Просто имейте ввиду.
Записан
niXman
Гость
« Ответ #73 : Ноябрь 29, 2009, 19:12 »

Цитировать
Приятно видеть приличный объем Улыбающийся Но на одном ядре есть подлянка: часто оно "работает" с нитками, все нормально. А когда запускаем там где физически 2 или более процессора - оно валится. Надо как-то отладить, приходится проситься к кому-то на машину - а это никому не приятно и.т.п.  Просто имейте ввиду.
Так это дело техники Подмигивающий
Кстати у меня 4 ядра, и ничего, работает Подмигивающий
Записан
niXman
Гость
« Ответ #74 : Ноябрь 29, 2009, 19:40 »

Spectre, pastor, по всем ссылкам что я нашел, есть только чарты версии 4.3 а в ней нет упоминаний про WebKit.

Идеи?
Записан
Страниц: 1 ... 3 4 [5] 6   Вверх
  Печать  
 
Перейти в:  


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