| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > idHttp.get в несколько потоков |
| Автор: Mach3 10.12.2010, 07:57 |
| Привет! Имеется функция, парсирующая ( надеюсь, правильно выразился ) странички.. Страничек таких много и загружаются они, на данный момент в цикле последовательно.. Как реализовать одновременную загрузку нескольких страничек ( думаю, это должно ускорить работу программы)? Насколько я понимаю, необходимо использовать нити.. Но с Threads никогда не сталкивался, и не особо понимаю как это должно все выглядеть. Если не затруднит, не могли бы вы вкратце объяснить работу такого алгоритма? Спасибо.. |
| Автор: Mach3 10.12.2010, 09:28 |
| Статья http://forum.vingrad.ru/forum/topic-60076.html убила множество вопросов.. Спасибо.. |
| Автор: Mach3 10.12.2010, 11:28 | ||
запускаю потоки:
В таком виде все работает.. Проблема в том, что у меня в Links около 1000 ссылок.. Как сделать, чтобы "высвободившийся" поток запустить для нового линка? |
| Автор: Snowy 10.12.2010, 14:14 | ||
| 1. Заведи глобальную переменную integer, в которой будет храниться номер поcледней запрошенной ссылки из Links 2. Создай и запусти нужное количество тредов. 3. В треде крути цикл, такого типа:
InterlockedIncrement - атомарная функция, будет всегда возвращать следующий номер. Каждый тред, вызывая её, будет автоматом увеличивать переменную на еденицу. Функция атомарная, а потому потокобезопасная. |
| Автор: Mach3 12.12.2010, 06:43 |
| А каким методом лучше пользоваться? использовать атомарную функцию или использовать критическую секцию? спасибо.. |
| Автор: Snowy 13.12.2010, 13:35 |
| Для увеличения счётчика лучше атомарная функция - ведь всё, что нужно - прибавить еденичку. Interlocked функции для этого и предназначены. |
| Автор: Mach3 5.1.2011, 06:53 |
| Хотел бы уточнить.. Допустим, мне необходимо в глоб переменную типа TStringList добавлять строки из разных потоков.. Обязательно ли Links.Add(Link) вызывать в критической секции? Спасибо.. |
| Автор: Snowy 5.1.2011, 16:22 |
| Обязательно. |