Главная страница
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.029 c
15-1179751582
Dimon777
2007-05-21 16:46
2007.08.19
BDE+Paradox+Vista: Кто нибудь пробовал?


8-1163235073
Cool Boy
2006-11-11 11:51
2007.08.19
Как у TAgent -а


15-1184930996
@!!ex
2007-07-20 15:29
2007.08.19
Ситуация с аварией.


1-1181733045
elserpiente
2007-06-13 15:10
2007.08.19
Поинтер на интерфейс


2-1185130508
copron
2007-07-22 22:55
2007.08.19
GetNextItem