Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.snto-msu.net/showflat.php?Number=6155054&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 14:19:05 2016
Кодировка: Windows-1251
Распараллелить vcl - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 1
Danse_Macabre

Рег.: 22.01.2007
Сообщений: 83
Рейтинг: 0
  Распараллелить vcl
      21.05.2007 20:43
 

Навеяно предыдущей проблемой.
Каким образом можно в рамках одной программы запустить параллельно несколько vcl-ных потоков?
Дано: есть программа, которая при помощи компонента (дело происходит в 7 Delphi) TEmbeddedWB (обертки для библиотеки mshtml.dll - реализующей функциональность IE) собирает некоторую статистику с сайта. Проблема в том, что на оду страницу тратиться примерно около 2 секунд. Страниц более 30000. В результате возникла идея (предполагая, что большая часть этого времени не есть какие-то вычисления, а просто установка соединения), использовать сразу несколько компонентов TEmbeddedWB, но, в чем загвоздка, метод Navigate2 в потоке нельзя выполнить, только через Synchronize, что убивает пользу от распараллеливания.
Расскажите как, либо посоветуйте какой-нибудь невизуальный компонент для парсинга html (очень желательно, что бы онм не работал со своим внутреннним представлением а с DHTML, что бы можно было сразу из него вытащить интефейс IHTMLDocument2 )
 


Jerry
Санек

Рег.: 14.03.2004
Сообщений: 1360
Из: Москва
Рейтинг: 501
  Re: Распараллелить vcl [re: Danse_Macabre]
      21.05.2007 21:04
 

В ответ на:

Расскажите как, либо посоветуйте какой-нибудь невизуальный компонент для парсинга html



А что конкретно должен уметь парсер html?

Kai

Рег.: 25.10.2002
Сообщений: 8251
Рейтинг: 818
  Re: Распараллелить vcl [re: Danse_Macabre]
      21.05.2007 21:51
 

Quote:

невизуальный компонент для парсинга html



htmltidy + любой (невизуальный )xml-парсер.

Danse_Macabre

Рег.: 22.01.2007
Сообщений: 83
Рейтинг: 0
  Re: Распараллелить vcl [re: Jerry]
      21.05.2007 22:53
 

а)Предоставлять документ в виде иерархической структуры ( )
б) Уметь делать выборку всех подструктур по имени тега (например всех таблиц TABLE)
в) Хранить атрибуты тегов, а желательно, уметь делать выборку всех тегов указанного типа с указанным атрибутом и его значением
г) И, само собой разумеется, быть взаимооднозначным представлением html-документа (то есть, хранить все тексты, ссылки и.т.д.)

Danse_Macabre

Рег.: 22.01.2007
Сообщений: 83
Рейтинг: 0
  Re: Распараллелить vcl [re: Kai]
      21.05.2007 22:59
 

Прчем здесь htmltidy? Это же утилита для проверки корректности html-документа
Например? Какой xml-парсер стоит использовать?

horror
гонобобель

Рег.: 30.09.2002
Сообщений: 3784
Рейтинг: 2137
  Re: Распараллелить vcl [re: Kai]
      21.05.2007 23:00
 

оффтопик:
html не обязан парсится хмл-парсером.
там могут быть незакрытые теги =\

Kai

Рег.: 25.10.2002
Сообщений: 8251
Рейтинг: 818
  Re: Распараллелить vcl [re: Danse_Macabre]
      21.05.2007 23:04
 

Не только, оно бывает в виде библиотеки, и превращает любое г. в валидный xml. А потом - парсером, для xml их явно больше, чем для html. Хз какие там для дельфей есть, я думал они уже давно тихо скончались.

Danse_Macabre

Рег.: 22.01.2007
Сообщений: 83
Рейтинг: 0
  Re: Распараллелить vcl [re: horror]
      21.05.2007 23:07
 

Не могут, а они есть, притом в изрядном количестве, во всяком случае, в тех файлах что я собираюсь парсить)

horror
гонобобель

Рег.: 30.09.2002
Сообщений: 3784
Рейтинг: 2137
  Re: Распараллелить vcl [re: Danse_Macabre]
      21.05.2007 23:12
 

Quote:

Не могут, а они есть



что ты сказал?
я утверждаю, что в хтмл могут быть незакрытые теги (из-за чего хмл-парсер выдает ошибку), однако браузер корректно распарсит(сам закроет незакрытые теги) и покажет страничку.



Редактировал horror (21.05.2007 23:13)
Danse_Macabre

Рег.: 22.01.2007
Сообщений: 83
Рейтинг: 0
  Re: Распараллелить vcl [re: horror]
      21.05.2007 23:42
 

Я усиливаю твое утверждение
А я утверждаю, что в тех документах которые мне надо парсить, встречается огромное число незакрытых тегов)))

Grey_DeMonstr
Software Fiend

Рег.: 04.04.2005
Сообщений: 5522
Из: .
Рейтинг: 2400
  Re: Распараллелить vcl [re: Danse_Macabre]
      22.05.2007 13:03
 

Я может не в теме, но... А что мешает создавать компонент внутри потока и там же навигейтиться и парсить? Метод синхронизации, насколько помню, нужен только для правильной перерисовки визуальных элементов формы, все остальное можно делать в потоке.



У меня все работает. Что я делаю неправильно?
Сага об XYZ
Rad
delinquent guy

Рег.: 06.09.2005
Сообщений: 17291
Из: here and there
Рейтинг: 2232
  Re: Распараллелить vcl [re: Grey_DeMonstr]
      22.05.2007 18:39
 

В ответ на:

Я может не в теме, но... А что мешает создавать компонент внутри потока и там же навигейтиться и парсить? Метод синхронизации, насколько помню, нужен только для правильной перерисовки визуальных элементов формы, все остальное можно делать в потоке.



По идее можно, если компонент не пытается взаимодействовать с vcl-компонентами (это может произойти даже если создавать его без указания родителя).

На счет изначального вопроса.
Мне приходилось запускать vcl в не основном потоке (код содержался в dll-ке, которая должна была возвращать управление сразу). Пришлось применять массу изощрений, пока я заставил это дело работать корректно в любой ситуации. Соответственно в механизме взаимодействия потоков пришлось подробно разбираться. Так вот, что касается D7, без модификации кода VCL запустить два полноценных vcl-ных потока не получится, т.к. для синхронизации потоков используются глобальные переменные, недоступные извне. У меня в связи с этим возникла проблема корректного закрытия окон в правильном потоке (DestroyWindow работает только из потока, в котором был вызов CreateWindow/CreateWindowEx).
Так что ищите thread-safe решения.



Страницы: 1

Technical >> Development (Archive)

Дополнительная информация
0 зарегистрированных и 1 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в