Форум: "Начинающим";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.045 c