|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.02.2017, 05:59 | #1 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Проблема с потокоаой обработкой
Здравствуйтте.
Сегодня я стал свидетелем одной забавной ситуации ... Что у меня есть: 1) Selenium, ChromeDriver, да опять; 2) необходимость загрузить страницу в драйвере; 3) проблема - если непосредственно в процессе загрузки пропадает связь с интернетом, то драйвер уходит в вечную загрузку, и не происходит выхода из свойства/функции Url; 4) решение проблемы - завернуть загрузку страницы в поток, и ждать результата/таймаута. Пока вроде всё нормально ... До тех пор, пока не выйдет установленный мною таймаут. По завершению цикла опроса состояний я вызывал Abort() потоку загрузки, и из этого аборта не выпадало никаких исключений. Если цикл завершился таймаутом, и драйвер повесился - после появления интернета я получаю живой поток загрузки, и это после "успешного" аборта. Такое мне показала трассировка функции потока. Проблема быстро решилась передачей состояния "ты уже не нужен" через объект, который изначально передавался в поток. А теперь вопросы: 1) почему поток выжил ? 2) имеет ли смысл вызывать аборт при таких обстоятельствах ? 3) опасно ли для данных вызывать аборт в такой ситуации ? 4) как правильнее сообщить драйверу, что "у нас проблема" ?
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 18.02.2017 в 15:39. |
18.02.2017, 10:38 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Там можно Timeout поставить, может поможет.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
18.02.2017, 15:26 | #3 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Искал, и не обнаружил. Если бы что то нашёл - свой таймаут сооружать не стал бы.
Так же не обнаружил возможности остановить загрузку (что то типа .Navigate().Break() ). Из-за второго кстати я получаю асинхрон программы и драйвера (это по части моего 4-го вопроса), что без брейка решается только перезапуском драйвера. upd: залез ещё вот сюда: driver.Navigate().GoToUrl() Тут тоже нет ни намёка на таймауты.
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 18.02.2017 в 15:42. |
18.02.2017, 15:40 | #4 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
18.02.2017, 15:55 | #5 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Alex11223, это уже конечно лучше, но мой таймаут уже готов; к тому же он позволяет сбросить попытку загрузки до завершения таймаута.
Ладно, на 4-ый вопрос ответили ... Как на счёт остальных ?
Подпись ? Не, не слышал ...
|
18.02.2017, 16:14 | #6 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Abort не гарантирует завершения потока.
если поток находится вне управляемого кода, то он может и не получить сигнал. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с обработкой хтмл | gufon | Общие вопросы Delphi | 13 | 28.03.2011 11:44 |
Проблема с обработкой исключений в Delphi при компиляции программы на сервере | ivladak | Общие вопросы Delphi | 14 | 15.08.2009 20:58 |
WebBrowser проблема с загрузкой страницы и последующей обработкой | OkeaH | Общие вопросы Delphi | 3 | 15.02.2009 01:43 |
Проблема с обработкой нажатой клавиши | Bayazet | Общие вопросы Delphi | 7 | 10.02.2009 13:21 |
Проблема с обработкой DBF файла | oleg kutkov | Общие вопросы C/C++ | 1 | 22.08.2008 21:07 |