![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка ошибок в потоке
r.o.o.t © (2007-10-12 09:48:00)Господа как обрабатывать ошибки в потоках??
в основных формах понятно
но как это делать в потоках
try
except
end;
это понятно но как обрабатывать исключения например происходящие в сокетах или компанентах созданны на лету...???
в потоке
Сергей М. (2007-10-12 14:38:00) [1]
> как извлечь всю подробную информацию об исключении в try except
Можно подумать что ты знаешь "как извлечь всю подробную информацию об исключении в Application.OnException"))
Сергей М. (2007-10-12 14:35:00) [2]
> как извлечь всю подробную информацию об исключении
> в try except
>
Класс исключения знаешь ? Знаешь. Это - ESocketConnectionError.
О наличии публичногосв-ва Message у любогонаследника класса Exception знаешь ? Знаешь. Следовательно, получить и проанализировать этот текст ты имеешь право и можешь.
Проанализировать SConnect.pas можешь ? Можешь. И сразу увидишь там строчку
raise ESocketConnectionError.Create(SysErrorMessage(WSAGetLastError));
Что тебе мешает в обработчике исключения повторно запросить WSAGetLastError и проанализировать код отказа на интересующий тебя предмет ? Ничто.
Так в чем же дело?
Сергей М. (2007-10-12 14:30:00) [3]
> исключение происходит глобально
Как это "глобально" ? Поясни ..
> но не в участке кода который можно обрабаоттать try except
А почемуэтот участок кода нельзязаклбчить в блок try..except ?
> как мне в потоке отлавливать эти исключеня т.е. их возникновение
> по не по вине клиента а по вине внешнеий стороны
Ну а какая нафих разница, кто явился "зачинщиком беспорядков" ?
Соединение-то уже не существует ...
А если тебя это таки интересует, то проблема решается либо анализом WSAGetLastError либо парсингом текста с сообщением о причинах исключения.
Kolan (2007-10-12 14:29:00) [4]> try except
try
except
on E: Exception do
{E это и есть исключение. Выбирай всю инфу которую хочешь }
end;
r.o.o.t (2007-10-12 14:27:00) [5]ходим по кругу
ладно
вопрос ледующий как извлечь всю подробную информацию об исключении
в try except
Anatoly Podgoretsky (2007-10-12 14:18:00) [6]> r.o.o.t (12.10.2007 14:01:19) [19]
Перехват исключений делается с помощью try except
r.o.o.t (2007-10-12 14:15:00) [7]ок
допустим
сервер аварино рвет коннект с клиентом исключение происходит глобально но не в участке кода который можно обрабаоттать try except.
как мне в потоке отлавливать эти исключеня т.е. их возникновение по не по вине клиента а по вине внешнеий стороны....
Сергей М. (2007-10-12 14:11:00) [8]
> r.o.o.t © (12.10.07 14:01) [19]
Пока ты вразумительно не объяснишь, чтоты намерен делать при обрабтке такого исключения, конктретных рекомендаций не жди.
Сергей М. (2007-10-12 14:08:00) [9]
> как мне можно перехватить исключение которое возникает в
> потоке
> без try except
Никак.
r.o.o.t (2007-10-12 14:01:00) [10]короче как мне можно перехватить исключение которое возникает в потоке
без try except
Сергей М. (2007-10-12 13:03:00) [11]
> нчинается исполнятся метод onException у данного каомапнета
> где я отрабатываю исключение
Вот я и спрашиваю про твои действия в ходе обработки этогоисключения...
> ежели данный компанент создан в потоке тоApplicationEvents
> неработает
Объясни вразумительно, нафих нужен этот ApplicationEvents, если исключение можно (и нужно !) перехватить и обработать в том же потоке ?
Нет, ну решение конечно же есть, и довольно тривиальное, но я не пойму смысла..
r.o.o.t (2007-10-12 12:50:00) [12]ApplicationEvents
нчинается исполнятся метод onException у данного каомапнета где я отрабатываю исключение. итд
это в том случае если компанентTSocketConnection создан не в потоке
но ежели данный компанент создан в потоке тоApplicationEvents неработает
и соответвенно процедура обработчик несрабатывает как мне одаптировать его к потоку и как мне прерхватывать исключения происходящие в TSocketConnection который создан в потоке
Сергей М. (2007-10-12 12:47:00) [13]
> на форме я делал через ApplicationEvents
И что ?
Ну, предположим, это исключение возникло волшебным образом. Что дальше ? Твои действия ?
r.o.o.t (2007-10-12 12:40:00) [14]да так чем отлавливать в потоке
>on E: ESocketConnectionError do Something
на форме я делал через ApplicationEvents
Anatoly Podgoretsky (2007-10-12 12:36:00) [15]
> просто в примере все же фальное исключение моделируется
Для программы это не фатально, посмотри на работу качалок, фтп клиентов, это вообще обычная, легко обрабатываемая ситуация.
Суслик (2007-10-12 12:26:00) [16]
>
> [10] Leonid Troyanovsky © (12.10.07 11:57)
>
> > Суслик (12.10.07 11:27) [7]
>
> > эта, ты о чем? OnTerminate всегда вызовется при завершении
>
>
> А ты о чем? :)
тоже верно :)
просто в примере все же фальное исключение моделируется
Сергей М. (2007-10-12 12:22:00) [17]
> я говорою про TSocketConnection
Ну спасибо)
наконец-то ты соизволил сказать, о каком таком сокете идет речь)
> ты несможешь описать на клиенте в try except
Чтой-то вдруг ?
А это что, по-твоему
on E: ESocketConnectionError do Something;
?
> разрыв свзяи сокета со стороны сервера
Разрыв разрыву рознь.
Kolan (2007-10-12 12:05:00) [18]> [9] r.o.o.t © (12.10.07 11:34)
> разрыв свзяи сокета со стороны сервера
> ты несможешь описать на клиенте в try except
> обычно происходит исключение error reading from soket я
> говорою про TSocketConnection
Я мало знаю про TSocketConnection, но раз есть исключениеerror reading from soket, с ним и работай.
То есть ты хочешь читать и получаешьerror reading from soket значит связь обормалась.
Оч. советую на каждом уровне описыват свои собственные исключения
Leonid Troyanovsky (2007-10-12 11:57:00) [19]
> Суслик (12.10.07 11:27) [7]
> эта, ты о чем? OnTerminate всегда вызовется при завершении
А ты о чем? :)
Не всякое исключение фатально, т.е., не обязательно завершение.
--
Regards, LVT.
r.o.o.t (2007-10-12 11:34:00) [20]разрыв свзяи сокета со стороны сервера
ты несможешь описать на клиенте в try except
обычно происходит исключение error reading from soket я говорою про TSocketConnection