![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| arashvg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 19.6.2009 Репутация: нет Всего: нет |
Здравствуйте, эксперты!
Здравствуйте, никогда не работал с потоками, но вот появилась задача для которой нужны именно потоки. Собственно у меня есть список сайтов, есть процедура, которая делает гет запрос парсит, то что мне нужно, записывает в переменную. Собственно как это сделать с помощью потоков? ниже приведен полный листинг примера, то что прога делает теперь, повторяюсь, это только пример. Зарание спасибо!
Это сообщение отредактировал(а) arashvg - 4.2.2012, 17:02 |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
Только вопрос забыл задать. Волнуешься?
Добавлено через 3 минуты и 53 секунды Читал? Работа с потоками в Delphi |
|||
|
||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
||||
|
||||
| arashvg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 19.6.2009 Репутация: нет Всего: нет |
не забыл читал, нифига не понял, именно поэтому и спрашиваю. Хотелось бы увидеть или почитать что-то по-проще для начала
спсибо, это больше подойдет, иду изучать! |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 36 Всего: 329 |
arashvg, аа, ты хочешь, чтобы твой код тебе полностью переписали на потоки? Тогда тебе в другой раздел. Есть Центр помощи и фриланс.
Добавлено через 53 секунды значит читай, экспериментируй, изучай до полного просветления Добавлено через 2 минуты и 14 секунд Я так понимаю, что тебе pars(s1,s2,s3,s4,s5:string) нужно запихать в поток. Работай над этим. |
|||
|
||||
| MetalFan |
|
||||||||||||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Я бы порекомендовал автору данного творения застрелица... Либо переписать статью, исправив откровенные ляпы в коде. Очень сочувствую новичку, который начнет изучать работу с потоками с этой статьи... Пару ляпов, которые сразу бросились в глаза:
Бред какой-то....
Да, да, из доп.потока очень "полезно" обращаться к VCL компонентам... Может сразу на грабли обоими ногами вспрыгнуть? Ну в общем приятных граблей новичкам после "изучения" этой статейки. А автору пусть икается. Это сообщение отредактировал(а) MetalFan - 7.2.2012, 07:39 -------------------- There are always someone smarter than you... |
||||||||||||
|
|||||||||||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Кстати, презанятнешая класс-функция появилась у TThread в одной из последних версия делфи (XE?) CreateAnonymousThread.
Теперь легко и просто (конечно, с пониманием дела) можно "обернуть" выполнения участка кода в отдельный поток. Краткий пример:
п.с. не претендую на чистоту кода. Если есть замечания по использованию анонимной функции - велкам... п.п.с. подчеркну, что этот подход (вызов через CreateAnonymousThread подходит для простых случаев и ограничен в возможностях). -------------------- There are always someone smarter than you... |
|||
|
||||
| Gwire |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Это сообщение отредактировал(а) Gwire - 9.2.2012, 13:00 |
||||
|
|||||
| ZBugz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 636 Регистрация: 15.2.2006 Где: Москва Репутация: 6 Всего: 6 |
|
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Gwire, очень спорный код... я бы написал по-другому. Но в целом, как пример, сойдет.
ZBugz, хм, а что не так? -------------------- There are always someone smarter than you... |
|||
|
||||
| Gwire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Механизм выведен эмпирический способом. При использовании нет AV, программа не зависает при завершении и простой вызов и доступ к результатам. Поток не лезет к форме (к VCL). Основной поток ничего не может с ним сделать пока он в процессе вычислений (кроме прибить). Недостатки? Не работает в полной мере без окна-получателя сообщений о завершении. Нужно проверять поле InProcess. |
|||
|
||||
| Gwire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Когда то у меня были проблемы c потоками когда из них юзал VCL. Вычитал что этого лучше не делать. Переделал. Проблемы исчезли. Сейчас я понимаю, что нужно было синхронизировать доступ к компонентам VCL между основным и дополнительным потоками. Но также понимаю что тогда пропадает нужда в дополнительном потоке. =/ Один останавливается чтобы подождать другого. Конкретно в этой задаче, если дополнительный поток редко обращается к VCL, то ничего страшного в синхронизации с основным потоком нет. Но так привыкнешь за собой тащить эти грабли, и когда то они тебе ударят по затылку. А ты будешь сидеть и думать: "Но ведь раньше все в порядке было! Весь интернет трубит, что не рекомендуется обращается к VCL из дополнительных потоков. Чужие ошибки привели в такому заключению? Мне не разу не доводилось видеть человека падающего с большой высоты и разбивающегося. Но все говорят, что человек в 99.9% умирает. И я им верю, хотя сам не проверял. Чужие ошибки очень полезны. Сомневаетесь - пробуйте (я не по поводу прыжков). Это сообщение отредактировал(а) Gwire - 13.2.2012, 14:51 |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
Gwire, да нет, твой код явных ошибок не содержит. Но к некоторым частям можно придраться "по-мелочи")
К примеру:
Хм, а самому проверить и убедиться, что НЕ СТОИТ обращаться к визуальным компонентам из доп. потоков разве на столько сложно? Практически весь код VCL написан без учета использования в н-ких потоках. Никаких синхронизаций, разделенного доступа и т.п. -------------------- There are always someone smarter than you... |
|||
|
||||
| Gwire |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Для этого нужно хорошее понимание этой области. И не только с потоками, в любой области. На счет InProcess - действительно упустил моментик. Можно критическую секцию использовать. (uses SyncObjs ... TCriticalSection) Это сообщение отредактировал(а) Gwire - 20.2.2012, 11:08 |
|||
|
||||
| Gwire |
|
||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Сидел плевал в потолок - посетила мысль как модернизировать код. Захотелось поделится и обсудить степень улучшения:
Это сообщение отредактировал(а) Gwire - 26.2.2012, 21:36 |
||||||||||
|
|||||||||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |