Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.041 c
15-1190800801
ТТ
2007-09-26 14:00
2007.11.04
компиляция-оптимизация


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


5-1147251414
DimaBr
2006-05-10 12:56
2007.11.04
Удаление компонента


15-1191262340
cber
2007-10-01 22:12
2007.11.04
В чём ошибка?


2-1192104024
VICTOR_
2007-10-11 16:00
2007.11.04
ListView и объекты





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский