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

Вниз

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

 
Andy BitOff (PPC)   (2008-10-29 13:37) [0]

Дожно ли исключение ESomeError возбужденное в SomeProc() дойти до его обработки в StartProcess?

procedure Tfrm_1.StartProcess();
begin
 try
   with Tfrm_Progress.Create(Self) do begin
     try
       ...
       if ShowModal = mrCancel then begin
         Raise ESomeError.Create("Прервано пользователем.");
       end;
       ...
     finally
       Free;
     end;
   end;
 except
   on E: ESomeError do Application.MessageBox(PChar(E.Message), "Сообщение.", MB_ICONSTOP or MB_OK or MB_SYSTEMMODAL);
 end;
end;

юнит с Tfrm_Progress

procedure Tfrm_Progress.FormShow(Sender: TObject);
begin
 PostMessage(Handle, WM_StartSomeProc, 0, 0); // Собственно, запуск SomeProc()
end;

...

procedure Tfrm_Progress.SomeProc();
begin
 try
   try
     ...

   except
     on E: Exception do begin
       case ErrorCode of
         eseSomeErrorOne: begin
           Raise ESomeError.Create("ля-ля-ля" + #13#10 + E.Message);
         end;
         eseSomeErrorTwo: begin
           Raise ESomeError.Create("ля-ля-ля" + opName + #13#10 + E.Message);
         end;
       else
         Raise;
       end;
     end;
   end;
 finally
   ...
   ModalResult := mrOk;
 end;
end;


 
Поросенок Винни-Пух ©   (2008-10-29 13:41) [1]

неа


 
Сергей М. ©   (2008-10-29 13:42) [2]

Обязано дойти ..


 
Andy BitOff (PPC)   (2008-10-29 13:47) [3]

Поросенок Винни-Пух ©
Почему?


 
Поросенок Винни-Пух ©   (2008-10-29 13:55) [4]

Потому что перевозбуждение условное, а базовое уже обработано.


 
Поросенок Винни-Пух ©   (2008-10-29 14:01) [5]

... а на наверху ловится только ESomeError.

а внизу по else Raise райзится просто Exception


 
Сергей М. ©   (2008-10-29 14:02) [6]


> Поросенок Винни-Пух ©   (29.10.08 13:55) [4]


А какая разница, перевужбуждено оно или нет ?

Если перевозбуждается именно ESomeError, то оно обязано (как и любое другое) дойти до except-блока в методе StartProcess и там обнаружено фильтром on E: ESomeError do ..


 
Поросенок Винни-Пух ©   (2008-10-29 14:04) [7]

Если перевозбуждается именно ESomeError,

Вот именно.
А если не перевозбуждается?


 
Сергей М. ©   (2008-10-29 14:04) [8]


> а внизу по else Raise райзится просто Exception


А по барабану что там райзится.
Все равно оно дойдет до except-блока в методе StartProcess.
Отсутствие соотв.фильтра в except-блока в методе StartProcess - это другой вопрос


 
Поросенок Винни-Пух ©   (2008-10-29 14:05) [9]

где гарантия что

case ErrorCode of

пойдет по нужной ветке?

если по ненужной пойдет, то будет просто else raise;


 
Andy BitOff (PPC)   (2008-10-29 14:05) [10]

Сергей М. ©
Я тоже так думаю, но не доходит =(

Поросенок Винни-Пух ©
Что почитать, чтобы правилно написать?


 
Сергей М. ©   (2008-10-29 14:08) [11]


> Andy BitOff (PPC)   (29.10.08 14:05) [10]


Рассказывай, как ты это определил ..


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


> Поросенок Винни-Пух ©   (29.10.08 14:05) [9]


> то будет просто else raise


Ну и что ?

Все равно оно обязано дойти до обработчика уровнем выше, каким бы оно ни было.

А фильтрация, т.е. ловля конкретно интересующего исключения, - это другой вопрос


 
Поросенок Винни-Пух ©   (2008-10-29 14:13) [13]

Что почитать, чтобы правилно написать?

А у тебя вообще все это в рамках одной нитки или нет?
Что-то мне внутри меня подсказывает, что procedure Tfrm_Progress.SomeProc(); - это другая нить.


 
Сергей М. ©   (2008-10-29 14:15) [14]


> Поросенок Винни-Пух ©   (29.10.08 14:13) [13]


С какого перепугу ?


 
han_malign ©   (2008-10-29 14:15) [15]

procedure TWinControl.MainWndProc(var Message: TMessage);
begin
 try
   try
     WindowProc(Message);
   finally
     FreeDeviceContexts;
     FreeMemoryContexts;
   end;
 except
   Application.HandleException(Self);
 end;
end;


 
han_malign ©   (2008-10-29 14:20) [16]

- вообще не возьмусь предсказать реакцию ситемы на исключение в API-шном callback-е (DispatchMessage{user32{WndProc{raise}}}) - скорее всего приложение будет снято...


 
Поросенок Винни-Пух ©   (2008-10-29 14:20) [17]

С какого перепугу ?

С прастова.
ключевые слова в тексте вопроса "ShowModal" "Progress"


 
Сергей М. ©   (2008-10-29 14:23) [18]


> Поросенок Винни-Пух ©   (29.10.08 14:20) [17]


Нет, я имел ввиду другое - PostMessage отправляет сообщение окну того же потока


 
Andy BitOff (PPC)   (2008-10-29 14:28) [19]

Сергей М. ©
Отладчиком. Брэкпоинтами. Результатом.

Поросенок Винни-Пух ©
Если я правильно понял вопрос, то в одной.

Сорри за костноязычностьж Сложно с кпк набирать


 
Поросенок Винни-Пух ©   (2008-10-29 14:29) [20]

а ну да. не заметил.
но все равно код слишком замудрен и витиеват с этими каскадными возбуждениями.


 
Сергей М. ©   (2008-10-29 14:40) [21]


> Andy BitOff (PPC)   (29.10.08 14:28) [19]


Тогда, пожалуй, прав han_malign ©   (29.10.08 14:15) [15] - в этой ситуации исключение направляется прямиком на обработку объектом Application



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

Форум: "Начинающим";
Текущий архив: 2008.12.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
2-1224924753
Gurd
2008-10-25 12:52
2008.12.07
StringGrid.RowHeight:=0


2-1224861382
AlexDan
2008-10-24 19:16
2008.12.07
ProgressBar - изменение цвета и размеров


11-1196228844
Rocket
2007-11-28 08:47
2008.12.07
OpenGLContext


2-1225203387
Andy BitOff
2008-10-28 17:16
2008.12.07
ForceDirectories и Exception


2-1224846527
NieL
2008-10-24 15:08
2008.12.07
проблема с OLE-сервером (AccessViolation)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский