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

Вниз

No ERRORS   Найти похожие ветки 

 
ATLANTIDO ©   (2002-04-02 00:24) [0]

Возможно в Delphi сделать так, чтобы не выскакивали сообщения
об ошибках (например ошибки сокетов)? Т.е. интересует не то,
как обробатывать конкретную ошибку, а просто сделать так,
чтобы не появлялись эти дурацкие окна ?


 
Lego ©   (2002-04-02 02:09) [1]

Вроде в примере чата(D5) видел что-то подобное в событии OnError > Error := 0;
может ошибаюсь...


 
EveryonE   (2002-04-02 07:35) [2]

надо обрабатывать исключительные ситуации. про них много написано, надо тока поискать. делается это так Application.OnException := ABC; ABC - процедура которая выполняется при ошибке. так же не забывай про try except finnaly.


 
EveryonE   (2002-04-02 07:39) [3]

В сокетах есть свой onError но он не всегда срабатывает, т.е. если ты обрабатываешь сокетовое сообщение в котором происходит какая нить ошибка (при работе с памятью например).


 
Song ©   (2002-04-02 08:54) [4]

По-моему достаточно забить эту ошибку в нужном месте:

try
// Здесь делаем нужные Вам действия с сокетами
except
end;


 
McSimm ©   (2002-04-02 11:13) [5]

Если же надо запретить появление сообщений об ошибке при запуске из-под Делфи, надо в Debuger Options в закладке Language Exceptions добавить тип исключения к списку Ignore - это выборочно. Или снять флажок Stop on Delphi Exceptions - для всех


 
ATLANTIDO ©   (2002-04-02 15:53) [6]

Видимо я плохо задал вопрос. Обьясняю конкретно, в чем проблема.
Я скомпилировал свое приложение, уже есть готовый работающий
exe-шник. Но, бывают ситуации, когда выскакивают всякие ошибки.
Одна из них - при попытке соединения сокетом (редко). Но я ошибку коннекта обрабатываю всеми известными методами : и
errorcode:=0, try..., короче говоря, мне не надо обрабатывать ошибку, мне надо чтобы эти дурацкие окна не появлялись.
>
> EveryonE (02.04.02 07:35)
> надо обрабатывать исключительные ситуации. про них много
> написано, надо тока поискать. делается это так Application.OnException
> := ABC; ABC - процедура которая выполняется при ошибке.
>

Т.е. если я сделаю выше сказаное, а процедура ABC будет выглядеть
так :

procedure ABC;
begin
end;

то эти окна не будут появляться ?


 
Song ©   (2002-04-02 16:00) [7]

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


 
ATLANTIDO ©   (2002-04-02 16:12) [8]


> Song © (02.04.02 16:00)
> А "эти дурацкие окна" не будут появляться, если не допускать
> ошибок или умело забить критические участки программы в
> состав исключений.

Если в идеале то согласен. Но знашь ли ты как решить ту же проблему с коннетом ??? Я решал ее всеми известными в форуме методами (ветка "сети"). Ты знаешь, ошибки перестали возникать !
Но уже через пару недель окна опять начали появляться :(
Как можно не допустить ошибки , которая по условиям программы должна быть (например сканер портов) ?


 
panov ©   (2002-04-02 16:19) [9]

Вопрос по сетям.

При ошибках работы сокетов возбуждается событие типа Lego © (02.04.02 02:09)

Там же и указан метод обработки и подавления сообщений.(Error:=0).

Использовани секций try... except... end в данном случае не решает проблем.


 
Digitman ©   (2002-04-02 16:32) [10]

чтобы "дурацкие окна" не появлялись, бери класс TCustomSocket, наследуй его и реализуй собственную машину состояния гнезда


 
ATLANTIDO ©   (2002-04-02 16:49) [11]


> При ошибках работы сокетов возбуждается событие типа Lego
> © (02.04.02 02:09)
>
> Там же и указан метод обработки и подавления сообщений.(Error:=0).

Я именно так и делал


 
mikki ©   (2002-04-02 18:16) [12]

как вариант: ошибка вылезает при попытке соединиться, если клиентсокет без блокировки, а сервер не стоит на прослушке, то
"Asynchronous socket error 10061" И никакие обработки не помогают:( Точнее они отрабатываются, но и эта ошибка лезет. Как вариант(довольно корявый) соединиться сначала с блокировкой(тут только обработчик except сработает) и при удачной попытке разорвать связь и затем соединиться без блокировки.Хотя чувствую должно быть более лаконичное решение.


 
ATLANTIDO ©   (2002-04-02 18:47) [13]

что такое блокировка ?


 
Erik Ivanov   (2002-04-02 19:39) [14]

Можно использовать Indy. Недавно сделал сервер на UDP притензий пока не имею, мне кожется это очень удобное решение когда нужна надежность.


 
Song ©   (2002-04-02 20:58) [15]

Не знаю, у меня получается обходить через except. Вот алгоритм:

1.Задаём значения для port и host
try
2.Открываем сокет
3.Ждём пока откроется
4.Посылаем
5.Закрываем
except
end;

Как видите, ошибка на любой стадии приведёт к возникновению исключительной ситуации, и except её благополучно обработает.


 
ATLANTIDO ©   (2002-04-02 23:29) [16]

цикл

repeat
until ClientSocket.Active

вешает программу


 
panov ©   (2002-04-03 07:11) [17]

>ATLANTIDO © (02.04.02 23:29)
А тебе что, нужно заблокировать и серверную сторону, кроме клиентской?


 
EveryonE   (2002-04-03 08:07) [18]

type TMainForm = class
public
...
procedure MyException(Sender:TObject; E:Exception);
...
...
implementation
{-----}
...
{-----}
procedure TMainForm.MyException(Sender:TObject; E:Exception);
begin
ShowMessage("Exception !!!");
end;

где-нить при запуске программы, например TMainForm.onCreate поставь: Application.OnException := MyException;

..... Все, если у тя будет такаия искл. ситуация выведется тока одно окно "Exeption !!!", соответственно если убрать этот ShowMessage, то и этого сообщения не будет.
try

except

finnaly можно использовать когда ты знаешь в каком участке кода у тя может возникнуть ошибка (исключительная ситуация).


 
Song ©   (2002-04-03 08:42) [19]

2ATLANTIDO © (02.04.02 23:29)
И правильно что вешает. Состояние Active не может измениться у компонента TClientScoket, если Вы не даёте своему приложению обрабатывать сообщения.
Такой вариант устранит проблему:

While not ClientSocket1.Active Do Application.ProcessMessages;


 
Malder ©   (2002-04-04 00:49) [20]

Блин. Мож я не туда лезу, но хочу ответить на первоночальный вопрос (хотя ответы на него уже были).

Чтобы не всплывали окна ошибок, нужно обрабатывать эти ошибки. try except не поможет в силу того, что ошибка возникает не при Active:=true (здесь то все Ок), а когда нет отклика от удаленного хоста (то есть по прошествию таймаута). При этом возникает событие OnError, в которое в качестве параметра передается код ошибки Error (или ErrorCode - точно не помню). Нужно проанализировать код ошибки, принять соответствующие меры и присвоить ErrorCode:=0. Тогда окно появляться не будет. Правда в режиме отладки из под Дельфей будет возникать ошибка, тут уже поможет:

McSimm © (02.04.02 11:13)
Если же надо запретить появление сообщений об ошибке при запуске из-под Делфи, надо в Debuger Options в закладке Language Exceptions добавить тип исключения к списку Ignore - это выборочно. Или снять флажок Stop on Delphi Exceptions - для всех



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

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

Наверх




Память: 0.52 MB
Время: 0.013 c
8-40111
smuggler
2002-01-28 14:16
2002.06.13
Конвертация


6-40129
ATLANTIDO
2002-04-02 00:36
2002.06.13
UDP


14-40151
and_sp
2002-05-08 10:56
2002.06.13
Install Shield для Delphi 3


6-40128
Schummi
2002-03-24 09:39
2002.06.13
проверить соединение с интернетом


14-40153
kaif
2002-05-09 04:52
2002.06.13
Как спасти данные с винча?