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

Вниз

try...finally и рекурсия   Найти похожие ветки 

 
Sdubaruhnul   (2007-07-19 22:37) [0]

Собираюсь тут пустить рекурсию и хотелось бы защитить удаление хендла при помощи try..finally. Но вот слышал когда-то, что есть у try..finally максимальный уровень вложенности. М-м... Это так или бред?


 
Loginov Dmitry ©   (2007-07-19 22:42) [1]

А проверить слабо?

try..finally записывает определенную информацию в стэк, а стэк ведь не резиновый!


 
oxffff ©   (2007-07-19 22:45) [2]

Максимальный уровень ограничен размером стека


 
Sdubaruhnul   (2007-07-19 22:46) [3]

Ясно, спасибо.

> а стэк ведь не резиновый!

But in Win32 stack is cheap. (c) Danny Thorpe


 
Юрий Зотов ©   (2007-07-19 22:46) [4]

> Sdubaruhnul   (19.07.07 22:37)

Лучше всего построить код так, чтобы рекурсия запускалась из секции try, а сам блок try-finally оставался нерекурсивным.


 
TUser ©   (2007-07-19 22:48) [5]

Рекусрия тоже через стек, а он не резиновый :)


 
Sdubaruhnul   (2007-07-19 22:51) [6]

>Лучше всего построить код так, чтобы рекурсия запускалась из секции try, а сам блок try-finally оставался нерекурсивным.

В каждой рекурсивной итерации мне нужно создавать хендл, который хотелось бы гарантированно освободить. Как же иначе поступить?


 
Юрий Зотов ©   (2007-07-19 23:02) [7]

> Sdubaruhnul   (19.07.07 22:51) [6]

То есть, каждой итерации нужен именно свой СОБСТВЕННЫЙ хэндл? Или одним на всех можно обойтись?

Если первое, то можно:

1. Попробовать все же обычный код (с try-finally в каждой итерации). Стек хоть и не резиновый, но и не маленький, его вполне может и хватить. К тому же, его можно и увеличить.

2. Запускать всю рекурсию в одном try-finally. Каждая итерация, получив хэндл, добавляет его в какой-то глобальный список, а по завершении освобождает хэндл и убирает его из списка. После завершения всей рекурсии (по любой причине) в общей секции finally освобождаются хэндлы, еще оставшиеся в списке.


 
Sdubaruhnul   (2007-07-19 23:07) [8]

>Юрий Зотов ©   (19.07.07 23:02) [7]

Спасибо за советы. У меня как раз первое. Буду пробовать.


 
Loginov Dmitry ©   (2007-07-20 07:52) [9]

> Запускать всю рекурсию в одном try-finally.


+
И при этом не использовать в рекурсивной процедуре строки, динамические массивы, варианты и интерфейсы.


 
Юрий Зотов ©   (2007-07-20 08:02) [10]

> Loginov Dmitry ©   (20.07.07 07:52) [9]

Почему?


 
Однокамушкин   (2007-07-20 08:07) [11]


> Юрий Зотов ©   (20.07.07 08:02) [10]
> Почему?

Видимо, потому, что при наличии таких переменных создаётся неявная секция try..finally, чтобы при любом завершении функции гарантированно финализировать их...


 
Игорь Шевченко ©   (2007-07-20 10:32) [12]

Loginov Dmitry ©   (20.07.07 07:52) [9]


> +
> И при этом не использовать в рекурсивной процедуре строки,
>  динамические массивы, варианты и интерфейсы.


Я об этом не знал и пользовался в рекурсивной процедуре строками...
И try...finally тоже...
И handle делал свой на каждом уровне рекурсии...

Пойду выброшу программу


 
oxffff ©   (2007-07-20 10:50) [13]


> Loginov Dmitry ©   (20.07.07 07:52) [9]
> > Запускать всю рекурсию в одном try-finally.
>
>
> +
> И при этом не использовать в рекурсивной процедуре строки,
>  динамические массивы, варианты и интерфейсы.


А если объявить входные параметры как const,var, out?
Либо использовать указатели?


 
Loginov Dmitry ©   (2007-07-20 11:50) [14]

я имел ввиду только локальные параметры.


 
Loginov Dmitry ©   (2007-07-20 11:50) [15]

параметры -> переменные :)


 
Игорь Шевченко ©   (2007-07-20 11:55) [16]

Loginov Dmitry ©   (20.07.07 11:50) [14]

А ты пробуй прежде чем советовать. Оно рулез


 
MsGuns ©   (2007-07-20 12:09) [17]

А мне вот интересно, как можно УДАЛИТЬ хэндл ?


 
Игорь Шевченко ©   (2007-07-20 12:13) [18]


> А мне вот интересно, как можно УДАЛИТЬ хэндл ?


CloseHandle - поверь, он удалится...


 
MsGuns ©   (2007-07-20 12:16) [19]

>Игорь Шевченко ©   (20.07.07 12:13) [18]
>CloseHandle - поверь, он удалится...

А что будет с той хреновиной, на которую он, собственно, указывает ?


 
Игорь Шевченко ©   (2007-07-20 12:29) [20]

MsGuns ©   (20.07.07 12:16) [19]

Handle вроде ни на что не указывает. Handle - это индекс в таблице.


 
oxffff ©   (2007-07-20 12:31) [21]


> Loginov Dmitry ©   (20.07.07 11:50) [14]
> я имел ввиду только локальные параметры.


в таком случае придется выкручиваться с указателями.
Чтобы не было авто финализации. :)
А так я с тобой полностью согласен. Ценное дополнение.



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

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

Наверх




Память: 0.52 MB
Время: 0.023 c
2-1185494148
Раф
2007-07-27 03:55
2007.08.19
Форма на панели задач...


15-1185148040
Kostafey
2007-07-23 03:47
2007.08.19
Произвести автозамену стилей шрифтов в Word


1-1181557452
Углук
2007-06-11 14:24
2007.08.19
Скрытие окна не работает


15-1184882265
Kostafey
2007-07-20 01:57
2007.08.19
Поиск в Access - базе


15-1185171911
question
2007-07-23 10:25
2007.08.19
програмист для ПО под виндоус из Москвы