![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Организация работы потоков
Тимоха © (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]
> понять пока еще трудно
Что конкретно ?