Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Организация работы потоков


Страницы:   1 2 3 4 5 6

Тимоха ©   (2009-02-02 08:20:00) 

Написал программу, которая выполняет ряд некоторых функций.
Одни из которых это - связь с сайтом и получение от него определенной информации, анализ полученной информации, проверка наличия новых данных на том же сайте и их загрузка.

Необходимо реализовать работу функций программы с использованием потоков.

Более подробное описание задачи потоков:

При старте программы возможны два варианта:
(А).Программа запускается впервые,поэтому запускается поток ThrStartFirst. Этот поток скачивает с сайта страницу, парсит нужные данные и добавляет их в более расширенный компонент listbox(у листбокса есть свойства text,text1,text2,text3). В то время как работает ThrStartFirst, запускается следующий поток ThrStratAnalys, который берет по очереди каждый итем листбокса, вытаскивает свойство text и скачивает страницу с интернета, уже анализируя полученные данные и сохраняя в определенной структуре в файл.В это же время должен работать еще один поток ThrUpdate. Он скачивает всю туже страницу и наблюдает за появлением новых данных,удалением тех которые уже удалены с той страницы в интернете, и изменением каких то данных.( запускаться поток должен через определенное заданное время)

Вариант (В). Программа запущенна не впервые. В листбокс заносятся данные из сохраненных файлов(учитывая что вариант А полностью отработал в предыдущей загрузке, если нет то скачиваются файлы, которые не были скачаны в пером запуске А). Как только данные занесены, а это происходит весьма быстро так как файлы находяятся на диске в формате txt, то запускается поток ThrUpdate, выполняет те же операции что и в варианте А. Идеально было, если б таких ThrUpdate было больше одного(т.е.ThrUpdate1,2,3,4... которые выполняли свои функции с данными, не обязательно изменявшие данные в листбоксе).

Изучал работу критических секций,мьютексов, семафоров и других вариантов синхронизации. Но понять пока еще трудно. Надеюсь на помощь в создании алгоритмов. Надеюсь услышать советы: что лучше использовать в моем случае, на что обратить внимание.
P.S. Программа будет работать с моим сайтом. Для скачивания содержимого страниц используется idhttp.
Заранее благодарен.


Медвежонок Пятачок   (2009-02-02 10:40:00) [101]

а теперь спроси себя, зачем тебе три разных класса потоков, которые на 90% делают одно и тоже


Тимоха   (2009-02-02 10:31:00) [102]

Ок. Имел ввиду параллельность.


Медвежонок Пятачок   (2009-02-02 10:24:00) [103]

последовательность работы потоков

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


Медвежонок Пятачок   (2009-02-02 10:21:00) [104]

С этим не сюда. С этим к терапевту.


Тимоха   (2009-02-02 10:20:00) [105]

Не могу продумать последовательность работы потоков и выбрать правильный метод синхронизации для моей задачи.


Медвежонок Пятачок   (2009-02-02 10:02:00) [106]

чтобы услышать дельные мысли, надо внятные вопросы задавать, а не просто туманно рассуждать "а что бы такое-етакое позаковыристее мне написать ?"

в чем конкретная проблема твоя?


Сергей М.   (2009-02-02 10:01:00) [107]


> Тимоха   (02.02.09 09:59) [10]


Это уж как угодно.


Тимоха   (2009-02-02 09:59:00) [108]

Медвежонок Пятачок ,я не претендую на статус прошаренного. Поэтому и пишу в форуме для начинающих. Прошу писать по теме. О генераторе дури можем поговорить в разделе "Прочее". Если есть дельные мысли по тому как правильней сделать, можете написать здесь - не стесняйтесь. Я вам буду только благодарен.
> Сергей М


Использовать буфер для хранения данных, а затем vcl потоком вытаскивать из буфера данные?


Медвежонок Пятачок   (2009-02-02 09:45:00) [109]

Надеюсь услышать советы: что лучше использовать в моем случае, на что обратить внимание.

что имеенно использовать - неважно.
главное перестать использовать свой генератор дури и воспользоваться мозгом.


Медвежонок Пятачок   (2009-02-02 09:40:00) [110]

(А).Программа запускается впервые,поэтому запускается поток ThrStartFirst. Этот поток скачивает с сайта страницу, парсит нужные данные и добавляет их в более расширенный компонент listbox(у листбокса есть свойства text,text1,text2,text3). В то время как работает ThrStartFirst, запускается следующий поток ThrStratAnalys, который берет по очереди каждый итем листбокса, вытаскивает свойство text и скачивает страницу с интернета, уже анализируя полученные данные и сохраняя в определенной структуре в файл.В это же время должен работать еще один поток ThrUpdate. Он скачивает всю туже страницу и наблюдает за появлением новых данных,удалением тех которые уже удалены с той страницы в интернете, и изменением каких то данных.( запускаться поток должен через определенное заданное время)

Дурь несусветная.
Три разных потока-близнеца "скачивают страницы с инета"


Сергей М.   (2009-02-02 09:39:00) [111]


> Тимоха   (02.02.09 09:33) [6]


А никто и не заставляет тебя от него отказываться.
Вопрос в том, что доп.тредам в условиях VCL-приложения крайне нежелательно знать ни про какие листбоксы и прочие UI-контролы.


Тимоха   (2009-02-02 09:33:00) [112]

Listbox служит выводом информации для пользователя, как я могу от него отказаться:))))))))))


Сергей М.   (2009-02-02 08:53:00) [113]


> Для реализации поставленной задачи критической секции хватит?


Если исключить потенциальную возможность обращений доп.потоков к визуальным VCL-контролам, то, возможно, и хватит.


KSergey   (2009-02-02 08:46:00) [114]

сразу отказываемся от всяких листбоксов для хранения информации, тем более межпоточной.

Собственно основное на что надо обращать внимание: чтобы
а) одни и те же данные не модифицировались из разных потоков одновременно; если надо модифицировать из разных потоков - обкладываем объектами сихронизации.
б) один поток не читал еще не готовые полностью данные другого потока; хотя это отчасти разновидность пункта а)

Объекты синхронизации вибираем по месту, сказать "вообще" - невозможно, ина че бы их не было столько разнообразных.
Всегда вибираем самые "легкие" из тех, что подходят для конкретной задачи.


Тимоха   (2009-02-02 08:41:00) [115]

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


Тимоха   (2009-02-02 08:30:00) [116]

Перед тем как начать писать программу с потоками, надо определить схему: какие потоки будут, как будут взаимодействовать и т.д. Пока трудности со схемой. Ну и с реализацией тоже.


Сергей М.   (2009-02-02 08:25:00) [117]


> понять пока еще трудно


Что конкретно ?


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо