![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Wanderer2019 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
Всем привет...
Возник такой вопрос.. как вызвать рекурсию в потоке? Если использовать параметризованный поток, то туда можно передать только 1 параметр (что не подходит). Можно конечно передавать какой нибудь ArrayList, но в случае с рекурсией это не совсем подходит... как мне кажется... как же тогда вызывать рекурсионные функции в отдельных потоках? Подскажите... и поправьте, если в чем то не прав. |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Гм... Что надо - вызвать функцию в отдельном потоке, затем из него вызывать её же в новом потоке ? Или как ? Непонятно в чём трудности. В поток можно передать любой объект, например свой класс или структуру (юзая ParametrizedThreadStart).
-------------------- ![]() |
|||
|
||||
tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Подходит? ![]() -------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
Wanderer2019 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
tol05,
извиняюсь за глупые вопросы.... но тогда получается, что внутри рекурсии мне нужно парсить эту структуру каждый раз... так??? т.е. каждый раз работая рекурсивно мне нужно собирать и передавать параметры в виде структуры из функции в функцию? таскать за собой объект? я правильно понял? |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
нет, зачем? Просто ты говорил, что тебя не устраивает передача только одного аргумента в поток. Ну а мы с mr.DUDA пытаемся показать, что один аргумент - это может быть просто обертка вокруг множества самых разных объектов...
Ну а касательно моего примера (если можно его назвать примером ![]() И каждый из наборов этих операций может требовать отдельных данных. Так я просто тебе "рюкзачок и набыл" этими данными, чтобы в поток передать. Ну а дальше - полная свобода действий:
заметь, и Func, и рекурсия (Rec) выполняются во внешнем потоке, а данные - рассосались по ф-циям ![]() Это сообщение отредактировал(а) tol05 - 7.7.2007, 07:52 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
Wanderer2019 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
tol05,
понятно.. спасибо... ну т.е. получается что это то же самое, что и вызов рекурсивной функции из не рекурсивной через обычный StartThread с передачей параметров в виде глобальных переменных? так я понимаю? |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Wanderer2019, не уложняй...
У тебя всегда идет вызов рекурсивной из нерекурсивной. Какой бы код ты ни писал - сначала начнет выполняться нерекурсивная ф-ция, а потом где-то начнется рекурсивная. EntryPoint сборки - это ведь тоже нерекурсивная функция, правда? ![]() Почему глобальных? Тех же статических и экземплярных переменных, как и при работе с обычными методами, в единственном потоке. Нигде инкапсуляция членов класса не нарушается. Ты вообще можешь не передавать ничего в поток, пусть методы внутри него сами обращаются за данными к своему классу, или к статическим членам других классов.... Все то же самое, что и с одним потоком, просто гораздо быстрее ![]() -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |