|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
29.08.2012, 10:02 | #1 |
Форумчанин
Регистрация: 25.08.2011
Сообщений: 140
|
потоки и цикл
Есть процедура примерно следующего содержания:
взять строчку из мемо цикл от 0 до 100 грузим данные в виде: сайт + i(от цикла) + текст из мемо парсим данные из загруженой страницы. Хочу сделать 5 потоков через сиджоб. Мне нужно в секцию поставить сам цикл так: начало секции взять строчку из мемо удалить строчку взятую из мемо конец секции цикл от 0 до 100 запрос снова секция для парса. или как? понимаю что парс все равно в один поток будет а вот как оптимизировать закачку? Если не ограничивать цикл то каждый поток будет грузить 100 раз один и тот же текст а нужен разный. |
29.08.2012, 12:16 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Соответственно компонент создается в начале потока и освобождается в конце.
I'm learning to live...
|
|
29.08.2012, 14:01 | #3 |
Форумчанин
Регистрация: 25.08.2011
Сообщений: 140
|
То есть если я сделаю вот так:
Код:
Последний раз редактировалось Зод; 29.08.2012 в 14:11. |
29.08.2012, 14:36 | #4 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
зачеркнутово-первых при старте потока вы получите AV. т.к. используете несозданный объект. но будут утечки памяти нет удаления не нужных более объектов.
во-вторых действия по получению и отметке обработки разнесены во-времени вероятен вариант когда два и более потоков будут качать одну ссылку. (при медленном канале связи) в-третьих при удалении строк число строк меняется а цикл for свои границы считает неизменными(считает неизменными), значит выход за границу массива (списка). в-четвертых для нормальной работы поток не должен знать где хранятся ссылки. Он должен уметь спросить "эй а что мне качать" и ему должны уметь ответить.
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 29.08.2012 в 14:42. |
29.08.2012, 14:41 | #5 | |
Подтвердите свой е-майл
Регистрация: 29.08.2012
Сообщений: 4,011
|
Цитата:
|
|
29.08.2012, 15:13 | #6 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,528
|
в развитие моего предыдущего поста. примерный план общения потока и основной формы.
Код:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 29.08.2012 в 15:20. |
29.08.2012, 16:39 | #7 |
Форумчанин
Регистрация: 10.12.2007
Сообщений: 124
|
1. лично я создал бы отдельный класс, где держал бы список url.
2. получении и добавление из этого класса защитил бы критической секцией. 3. удалял строчку сразу из списка, после того как отдали строчку потоку. 4. таким образом новому потоку отдавал бы стразу первую строчку. 5. через таймер и WaitForMultipleObjects проверял закончили ли потоки всю обработку. в вдогонку 6. на событиях и функций ожидания создал бы свои Start,Stop и т.д. 7. Не использовал бы FreeOnTerminate 8. Не использовал бы Synhronize(при малых объемах закачиваем страниц форма будет не доступна пользователю) хотя.. вариантов как это сделать много))) p.s. хотя бы запоминай индекс последней забранной потоком строки и при удалении строчки соответственно следи за индексом. как минимум при выделение строчки потоку уйдешь от лишнего цикла.
Русский язык не мой конёк
Последний раз редактировалось Neobrat; 29.08.2012 в 16:43. |
29.08.2012, 20:46 | #8 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
потоки и цикл While .. do | Человек_Борща | Общие вопросы Delphi | 3 | 03.06.2011 14:31 |
Цикл по времени - Как сделать так чтобы цикл выполнялся к примеру 10 секунд ? | Anarki | Общие вопросы C/C++ | 3 | 13.11.2009 19:23 |
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) | Mr.User | Помощь студентам | 9 | 23.11.2007 01:34 |