Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.04;
Скачать: CL | DM;

Вниз

Обработка ошибок в потоке   Найти похожие ветки 

 
r.o.o.t ©   (2007-10-12 09:48) [0]

Господа как обрабатывать ошибки в потоках??
в основных формах понятно
но как это делать в потоках
try
except
end;
это понятно но как обрабатывать исключения например происходящие в сокетах или компанентах созданны на лету...???
в потоке


 
Kolan ©   (2007-10-12 10:09) [1]

> но как это делать в потоках

Точно так же, а если хочешь уведомить гл. поток об ошибки сделай соотв метод, сохраняй общибку и отправляй её через Synchronize


 
Leonid Troyanovsky ©   (2007-10-12 10:20) [2]


> r.o.o.t ©   (12.10.07 09:48)  

> Господа как обрабатывать ошибки в потоках??

http://dn.codegear.com/article/10452

--
Regards, LVT.


 
Сергей М. ©   (2007-10-12 10:38) [3]


> но как обрабатывать исключения например происходящие в сокетах
> или компанентах созданны на лету...?


Точно так же как если бы все это творилось в любом ином потоке, в т.ч. основном.


 
Суслик   (2007-10-12 11:06) [4]


> [2] Leonid Troyanovsky ©   (12.10.07 10:20)
>
> > r.o.o.t ©   (12.10.07 09:48)  
>
> > Господа как обрабатывать ошибки в потоках??
>
> http://dn.codegear.com/article/10452


граммотно.

единственно я не понял зачем сделано так, а не через FatalException и OnTerminate. Имхо автор повторил их функциональность.


 
r.o.o.t ©   (2007-10-12 11:14) [5]

ну выше приведенные примеры гооврят о
try
except
end;
но мне неоходимо работать с глоальными ошибками например разрыв свзяи сокета его невозможно опистать try except есть компанент ApplicationEvents в методе onExcute можно отловить исключение....
как это делать в потоке??


 
Leonid Troyanovsky ©   (2007-10-12 11:19) [6]


> Суслик   (12.10.07 11:06) [4]

> единственно я не понял зачем сделано так, а не через FatalException
> и OnTerminate.

Изначально статья была написана во времена D2, IMHO.
Ну, а насчет OnTerminate - не всегда ж надобно Terminate.

Кста, в начале века году оценка у статьи была где-то 1.5 :)

--
Regards, LVT.


 
Суслик   (2007-10-12 11:27) [7]


> Ну, а насчет OnTerminate - не всегда ж надобно Terminate.

эта, ты о чем? OnTerminate всегда вызовется при завершении потока. Посмотри  ThreadProc в Classes.pas.


 
Сергей М. ©   (2007-10-12 11:31) [8]


> разрыв свзяи сокета его невозможно опистать try except


А у меня возможно.
Что я делаю неправильно ?


 
r.o.o.t ©   (2007-10-12 11:34) [9]

разрыв свзяи сокета со стороны сервера
ты несможешь описать на клиенте в try except
обычно происходит исключение error reading from soket я говорою про TSocketConnection


 
Leonid Troyanovsky ©   (2007-10-12 11:57) [10]


> Суслик   (12.10.07 11:27) [7]

> эта, ты о чем? OnTerminate всегда вызовется при завершении

А ты о чем? :)
Не всякое исключение фатально, т.е., не обязательно завершение.

--
Regards, LVT.


 
Kolan ©   (2007-10-12 12:05) [11]

> [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 — значит связь обормалась.

Оч. советую на каждом уровне описыват свои собственные исключения&#133


 
Сергей М. ©   (2007-10-12 12:22) [12]


> я говорою про TSocketConnection


Ну спасибо)
наконец-то  ты соизволил сказать, о каком таком сокете идет речь)


> ты несможешь описать на клиенте в try except


Чтой-то вдруг ?

А это что, по-твоему

on E: ESocketConnectionError do Something;

?


> разрыв свзяи сокета со стороны сервера


Разрыв разрыву рознь.


 
Суслик   (2007-10-12 12:26) [13]


>
>  [10] Leonid Troyanovsky ©   (12.10.07 11:57)
>
> > Суслик   (12.10.07 11:27) [7]
>
> > эта, ты о чем? OnTerminate всегда вызовется при завершении
>
>
> А ты о чем? :)


тоже верно :)
просто в примере все же фальное исключение моделируется


 
Anatoly Podgoretsky ©   (2007-10-12 12:36) [14]


> просто в примере все же фальное исключение моделируется

Для программы это не фатально, посмотри на работу качалок, фтп клиентов, это вообще обычная, легко обрабатываемая ситуация.


 
r.o.o.t ©   (2007-10-12 12:40) [15]

да так чем отлавливать в потоке
>on E: ESocketConnectionError do Something
на форме я делал через ApplicationEvents


 
Сергей М. ©   (2007-10-12 12:47) [16]


> на форме я делал через ApplicationEvents


И что ?

Ну, предположим, это исключение возникло волшебным образом. Что дальше ? Твои действия ?


 
r.o.o.t ©   (2007-10-12 12:50) [17]

ApplicationEvents
нчинается исполнятся метод onException у данного каомапнета где я отрабатываю исключение. итд

это в том случае если компанентTSocketConnection создан не в потоке

но ежели данный компанент создан в потоке тоApplicationEvents неработает
и соответвенно процедура обработчик несрабатывает как мне одаптировать его к потоку и как мне прерхватывать исключения происходящие в TSocketConnection который создан в потоке


 
Сергей М. ©   (2007-10-12 13:03) [18]


> нчинается исполнятся метод onException у данного каомапнета
> где я отрабатываю исключение


Вот я и спрашиваю про твои действия в ходе обработки этого исключения...


> ежели данный компанент создан в потоке тоApplicationEvents
> неработает


Объясни вразумительно, нафих нужен этот ApplicationEvents, если исключение можно (и нужно !) перехватить и обработать в том же потоке ?

Нет, ну решение конечно же есть, и довольно тривиальное, но я не пойму смысла ..


 
r.o.o.t ©   (2007-10-12 14:01) [19]

короче как мне можно перехватить исключение которое возникает в потоке
без try except


 
Сергей М. ©   (2007-10-12 14:08) [20]


> как мне можно перехватить исключение которое возникает в
> потоке
> без try except


Никак.


 
Сергей М. ©   (2007-10-12 14:11) [21]


> r.o.o.t ©   (12.10.07 14:01) [19]


Пока ты вразумительно не объяснишь, что ты намерен делать при обрабтке такого исключения, конктретных рекомендаций не жди.


 
r.o.o.t ©   (2007-10-12 14:15) [22]

ок
допустим

сервер аварино рвет коннект с клиентом исключение происходит  глобально но не в участке кода который можно обрабаоттать try except.
как мне в потоке отлавливать эти исключеня т.е. их возникновение по не по вине клиента а по вине внешнеий стороны....


 
Anatoly Podgoretsky ©   (2007-10-12 14:18) [23]

> r.o.o.t  (12.10.2007 14:01:19)  [19]

Перехват исключений делается с помощью try except


 
r.o.o.t ©   (2007-10-12 14:27) [24]

ходим по кругу

ладно

вопрос ледующий как извлечь всю подробную информацию об исключении
в try except


 
Kolan ©   (2007-10-12 14:29) [25]

> try except

try
except
 on E: Exception do
 {E — это и есть исключение. Выбирай всю инфу которую хочешь&#133}
end;


 
Сергей М. ©   (2007-10-12 14:30) [26]


> исключение происходит  глобально


Как это "глобально" ? Поясни ..


> но не в участке кода который можно обрабаоттать try except


А почему этот участок кода нельзя заклбчить в блок try..except ?


> как мне в потоке отлавливать эти исключеня т.е. их возникновение
> по не по вине клиента а по вине внешнеий стороны


Ну а какая нафих разница, кто явился "зачинщиком беспорядков" ?
Соединение-то уже не существует ...

А если тебя это таки интересует, то проблема решается либо анализом WSAGetLastError либо парсингом текста с сообщением о причинах исключения.


 
Сергей М. ©   (2007-10-12 14:35) [27]


> как извлечь всю подробную информацию об исключении
> в try except
>


Класс исключения знаешь ? Знаешь. Это - ESocketConnectionError.

О наличии публичного св-ва Message у любого наследника класса Exception знаешь ? Знаешь. Следовательно, получить и проанализировать этот текст ты имеешь право и можешь.

Проанализировать SConnect.pas можешь ? Можешь. И сразу увидишь там строчку

raise ESocketConnectionError.Create(SysErrorMessage(WSAGetLastError));

Что тебе мешает в обработчике исключения повторно запросить WSAGetLastError и проанализировать код отказа на интересующий тебя предмет ? Ничто.

Так в чем же дело ?


 
Сергей М. ©   (2007-10-12 14:38) [28]


> как извлечь всю подробную информацию об исключении в try except


Можно подумать что ты знаешь "как извлечь всю подробную информацию об исключении в Application.OnException"))



Страницы: 1 вся ветка

Текущий архив: 2007.11.04;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.022 c
2-1191930542
ффф
2007-10-09 15:49
2007.11.04
фастрепорт


15-1191221279
Dimedrol
2007-10-01 10:47
2007.11.04
2 Wireless карточки. Медленная скорость между ними. Почему?


15-1190887121
Washington
2007-09-27 13:58
2007.11.04
Программирование автомагнитолы


4-1178286129
White Barsik
2007-05-04 17:42
2007.11.04
LoadLibrary, GetProcAddress и пр.


4-1177771250
webpauk
2007-04-28 18:40
2007.11.04
добавление пункта в контекстное мен. проводника