Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обработка ошибок в потоке


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо