| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Проблемы с потоками при закачке страниц |
| Автор: Pcrepair 27.12.2012, 10:16 | ||
| Добрый день. Есть функция вида function LoadPage(const Url:string):string; для закачки страниц на базе idHHP.Get, которая обеспечивает: - закачку страниц с фреймами - закачку страниц по HTTPs - смену Request.UserAgent (доп. функция) по Random из списка агентов - подавление исключений в коде idHHP.Get с записью в лог причин - вывод сообщений о утечке памяти при закрытии Арр Сама по себе функция работает нормально, загружает все страницы и без утечки памяти. Есть код запуска этой функции в многопоточном режиме:
Результат: В режиме отладки видно что возникает множество самых различных ошибок: - First chance exception at $00407466. Exception class $C0000005 with message 'access violation at 0x00407466: read of address 0x000000a4'. Process Loader_VER06.exe (2012) - First chance exception at $7C812AFB. Exception class EIdHTTPProtocolException with message 'Set-Cookie: dle_password=deleted; expires=Tue, 27-Dec-2011 20:37:50 GMT; path=/; domain=.freeseller.ru; httponly'. Process Loader_VER06.exe (2012) First chance exception at $00629F8C. Exception class $C0000005 with message 'access violation at 0x00629f8c: read of address 0x00000148'. Process Loader_VER06.exe (2012) - First chance exception at $7C812AFB. Exception class EOSError with message 'System Error. Code: 123. Синтаксическая ошибка в имени файла, имени папки или метке тома'. Process Loader_VER06.exe (2012) - First chance exception at $7C812AFB. Exception class EIdNotASocket with message 'Socket Error # 10038 Socket operation on non-socket.'. Process Loader_VER06.exe (2012) В рабочем режиме, за счет подавления исключений, все это конечно не вылазит, но: - закачиваются не все страницы(хотя все УРЛ валидные и функцией закачки закачиваются без вопросов) - после закрытия Арр выводится сообщение о многочисленных маленьких утечках памяти По теории потоки не должны пересекаться. каждый имеет свою память. вывод результата через КС. такое впечетление что потоки как то мешают друг другу Внимание!!! Вопрос: в чем может быть причина появления исключений и утечки памяти именно в режиме многопотоковой закачки? |
| Автор: Alexeis 27.12.2012, 18:40 |
| Вижу работа со списком gStore синхронизируется между потоками. Синхронизируется ли работа между главным потоком и любым из дополнительных касательно доступа к общей памяти объекта gStore ? |
| Автор: Pcrepair 27.12.2012, 19:08 | ||
это в смысле что доступ к примеру к gStore.Index или gStore.Text тоже должен быть через CS? пока нет, но это стенд, содержимое STORE просматривается после окончания работы всех потоков. все текущие проблемы возникают в момент загрузки страниц может свой класс правильней написать? с использованием внутри этого класса потоков. создавать потомок класса, передавать ему значение(УРЛ) + написать класс НАКОПИТЕЛЬ в который передавать асинхронно результат работы с ООП знаком пока только теоретически |