Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Общие вопросы по .NET и C# > вызов рекурсионной функции в потоке |
Автор: Wanderer2019 6.7.2007, 15:33 |
Всем привет... Возник такой вопрос.. как вызвать рекурсию в потоке? Если использовать параметризованный поток, то туда можно передать только 1 параметр (что не подходит). Можно конечно передавать какой нибудь ArrayList, но в случае с рекурсией это не совсем подходит... как мне кажется... как же тогда вызывать рекурсионные функции в отдельных потоках? Подскажите... и поправьте, если в чем то не прав. |
Автор: mr.DUDA 6.7.2007, 20:33 |
Гм... Что надо - вызвать функцию в отдельном потоке, затем из него вызывать её же в новом потоке ? Или как ? Непонятно в чём трудности. В поток можно передать любой объект, например свой класс или структуру (юзая ParametrizedThreadStart). |
Автор: Wanderer2019 6.7.2007, 22:42 |
tol05, извиняюсь за глупые вопросы.... но тогда получается, что внутри рекурсии мне нужно парсить эту структуру каждый раз... так??? т.е. каждый раз работая рекурсивно мне нужно собирать и передавать параметры в виде структуры из функции в функцию? таскать за собой объект? я правильно понял? |
Автор: tol05 6.7.2007, 23:31 | ||
нет, зачем? Просто ты говорил, что тебя не устраивает передача только одного аргумента в поток. Ну а мы с mr.DUDA пытаемся показать, что один аргумент - это может быть просто обертка вокруг множества самых разных объектов... Ну а касательно моего примера (если можно его назвать примером ![]() И каждый из наборов этих операций может требовать отдельных данных. Так я просто тебе "рюкзачок и набыл" этими данными, чтобы в поток передать. Ну а дальше - полная свобода действий:
заметь, и Func, и рекурсия (Rec) выполняются во внешнем потоке, а данные - рассосались по ф-циям ![]() |
Автор: Wanderer2019 7.7.2007, 12:42 |
tol05, понятно.. спасибо... ну т.е. получается что это то же самое, что и вызов рекурсивной функции из не рекурсивной через обычный StartThread с передачей параметров в виде глобальных переменных? так я понимаю? |
Автор: tol05 7.7.2007, 15:13 |
Wanderer2019, не уложняй... У тебя всегда идет вызов рекурсивной из нерекурсивной. Какой бы код ты ни писал - сначала начнет выполняться нерекурсивная ф-ция, а потом где-то начнется рекурсивная. EntryPoint сборки - это ведь тоже нерекурсивная функция, правда? ![]() Почему глобальных? Тех же статических и экземплярных переменных, как и при работе с обычными методами, в единственном потоке. Нигде инкапсуляция членов класса не нарушается. Ты вообще можешь не передавать ничего в поток, пусть методы внутри него сами обращаются за данными к своему классу, или к статическим членам других классов.... Все то же самое, что и с одним потоком, просто гораздо быстрее ![]() |