![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
try ... finally
Анонимщик © (2004-07-01 17:41:00)Как можно определить:
try
finally
// мы сюда попали нормальным образом или где-то после try было
// сгенерировано исключение?
end
Defunct (2004-07-02 18:03:00) [1]Анонимщик © (02.07.04 16:26) [44]
"все гениальное - просто" (С)
А гениев в MS не особо много, вот поэтому и приходится разбираться со всякой чепухой. AbnormalTermination как раз таковой и является.
Анонимщик (2004-07-02 16:30:00) [2]default
Спасибо, я там уже разобрался, сам ерунды малость нагородил, все заработало.
Анонимщик (2004-07-02 16:26:00) [3]panov
А я его не использую пока что и убирать его неоткуда. И мне тоже интересно, зачем это в майкрософте ее выдумали. Вы не знаете случайно?
default (2004-07-02 16:22:00) [4]Анонимщик © (02.07.04 15:04) [37]
это из-за ОС, я тоже увидев нули возмутился...посмотрите ещё статью на RSDN там написано про это
Тимохов (2004-07-02 16:17:00) [5]
> panov © (02.07.04 16:09) [41]
я тоже когда рихтера четил припух малось от реализации исключений в win.
и совершенно не мог понять, когда может пригодится иная функциональность - отличкая от предлагаемой дельфи.
Т.о. мне тоже интересно.
panov (2004-07-02 16:09:00) [6]>Анонимщик © (02.07.04 15:50) [40]
Комментирование не предлагать.
Что ж ты все думаешь, что тебя ущемлять будут? Ведь все мы коллеги, и всем интересно разобраться.
Вот мне, например, интересно, зачем, для какой цели нужно AbnormalTermination.
И поверь, что это не для того, чтобы тебя зацепить, или заставить убрать этот код а для того, чтобы понять, в каком случае мне это может понадобиться, какая польза от применения AbnormalTermination
Анонимщик (2004-07-02 15:50:00) [7]Digitman
Начнем с AbnormalTermination. Я хочу написать это слово в pas-модуле так, чтобы компилятор не ругался. Что для этого нужно сделать? Комментирование не предлагать.
Igorek (2004-07-02 15:20:00) [8]
> в теле finally-блока ничего кроме nil ты не увидишь в RaiseList
> причем вне зависимости от версии среды
Спасибо.
Digitman (2004-07-02 15:07:00) [9]
> Анонимщик © (02.07.04 15:04) [37]
> чего-то, все же, не понимаю. А хотелось разобраться
на то и форум
говори, ЧТО конкретно не понимаешь
Анонимщик (2004-07-02 15:04:00) [10]Digitman
А все и так завелось, но я чего-то, все же, не понимаю. А хотелось разобраться.
Тогда к этому еще один вопрос. Есть статья про критические секции на
http://www.microsoft.com/rus/msdn/magazine/archive/2003-12/CriticalFull.asp
Начал проверять на дельфи, ничего не вышло. Все поля в RTL_CRITICAL_SECTION (поле FSection) равны нулю всегда. Как же все-таки определить, сколько конкурирующих потоков ждут входа?
Digitman (2004-07-02 14:41:00) [11]
> Igorek © (02.07.04 14:21) [34]
> У меня Д5. Нету такой функции.
> Нашел только
> function RaiseList: Pointer; { Stack of current exception
> objects }
> Надо будет проверить.
даже и не проверяй, не трать время
в теле finally-блока ничего кроме nil ты не увидишь в RaiseList
причем вне зависимости от версии среды
указатель этот неявно устанавливается в не-nil-значение непосредственно перед передачей управления в except-блок
Тимохов (2004-07-02 14:26:00) [12]
> Igorek © (02.07.04 14:21) [34]
ставь шестой - там точно есть.
Igorek (2004-07-02 14:21:00) [13]
> Тимохов © (02.07.04 13:56) [32]
>
> > Igorek © (02.07.04 13:37) [31]
>
> модуль system.
У меня Д5. Нету такой функции.
Нашел только
function RaiseList: Pointer; { Stack of current exception objects }
Надо будет проверить.
Digitman (2004-07-02 14:20:00) [14]
> Тимохов © (02.07.04 13:56) [32]
> не прочел
без вопросов
> Анонимщик © (02.07.04 12:50) [28]
> все мне сказанне не утешает.
эт почему ? таки завелся с пол-пинка - доведи уж дело до конца ... оно мож и не в ту степь едешь, но чрезвычайно полезно для понимания ..
Тимохов (2004-07-02 13:56:00) [15]
> Igorek © (02.07.04 13:37) [31]
модуль system.
> Digitman © (02.07.04 13:17) [30]
забыл смайлы поставить :))
я сначала не прочел комментарий в начале: "это псевдокод".
виноват.
Igorek (2004-07-02 13:37:00) [16]
> а если при возникновении исключения воспользуйетесь функцией
> AcquireExceptionObject, то они будут работать где угодно
> :))
А что это за функция такая AcquireExceptionObject?
У меня в msnd ее нет.
Digitman (2004-07-02 13:17:00) [17]
> Тимохов © (02.07.04 12:53) [29]
> смешно.
ну уж не смешней твоего вопроса, мол, а где это ..
прекрасно же понимаешь, что нет такой ф-ции в WinAPI
Тимохов (2004-07-02 12:53:00) [18]
> Digitman © (02.07.04 12:06) [26]
смешно.
я так вообще и понял, что это мета функция.
> Igorek © (02.07.04 12:33) [27]
а если при возникновении исключения воспользуйетесь функцией AcquireExceptionObject, то они будут работать где угодно :))
Анонимщик (2004-07-02 12:50:00) [19]Digitman
Я, собственно, хотел сделать на дельфи то же, что у Рихтера в книге, только и всего. А все мне сказанне не утешает.
Igorek (2004-07-02 12:33:00) [20]в unit SysUtils есть:
function ExceptObject: TObject;
function ExceptAddr: Pointer;
Но они работают только в блоке try...except.
Остается только сожалеть:
- что они не работают в блоке try...finally
- что в Дельфи нету блока try...except...finally