Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передать данные в несколько обработок в потоках. Form1 для настроек, во Form2 отображает  
V
    Опции темы
graham
Дата 9.9.2009, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.4.2009

Репутация: нет
Всего: нет



В основной форме находятся настройки и кнопка. В зависимости от настроек надо запустить какое-то количество потоков на обработку. Количество потоков примерно от 1 до 50. Во время отработки потоков возможно изменение каких-то параметров, т.е. необходима еще одна форма. Кроме того, на второй форме надо еще и прогрессбары отображать для каждого потока отдельно.

Не представляю как сделать передачу данных для запуска потока в другую форму и далее запустить потоки.

Вижу пока так:
Получается в первой форме формирую данные на обработку и складываю их в массивы экземляров класса (класс данных универсальный для запуска любых потоков текущей задачи). 
Передаю во вторую форму ссылку на экземляр класса в консруктор второй формы. 
Во второй форме динамически создаю интерфейс для управления потоками и прогрессбары, в зависимости от того, сколько в массиве заполнено данных.
Создаю нужное количество потоков ( вот тут вопрос, как лучше обрабатывать, в Thread или в BackgroundWorker? ) и запускаю их.
Как сделать чтобы при изменении настроек во второй форме потоки получили новые настройки?

Может есть какой-то другой более легкий шаблонный способ до которого я сам не дошел, подскажите как лучше сделать.
Что выбрать Thread или BackgroundWorker?

PM MAIL   Вверх
Экскалупатор
Дата 9.9.2009, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



на сколько я себе это представляю Thread и BackgroundWorker это суть одно и тоже, выполнение кода в отдельном потоке. а можно поинтересоваться для чего столько потоков (от1 до 50)? просто не встречал задач где могло бы понадобиться 50 потоков.
PM MAIL ICQ   Вверх
mrbrooks
Дата 10.9.2009, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



Цитата(Экскалупатор @  9.9.2009,  19:15 Найти цитируемый пост)
просто не встречал задач где могло бы понадобиться 50 потоков. 

Сервер  smile 

graham, честно говоря задача настолько загадочна - что мозг ломается на середине текста.
PM MAIL   Вверх
uranpro
Дата 10.9.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1





--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
graham
Дата 11.9.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.4.2009

Репутация: нет
Всего: нет



2 Экскалупатор: Нужно обрабатывать группы файлов, каждая группа может обрабатываться параллельно, каждый обработанный фал укладывается в свой отдельный массив. В группе один поток ведущий - задает дополнительные параметры для обработки ведомыми потоками. После отработки ведущим потоком своих данных он должен выдержать паузу на заданное время, после этого запускаются ведомые. Пока последний ведомый поток в группе не закончил обработку шага, ведущий в группе не может запустить обработку нового шага и задать параметры для следующей обработки ведомыми. В общем как данные синхронизировать я понял, а вот как разграничить работу по времени нет. Если уж Sleep не гарантирует запуск потока через нужный интервал времени, тогда как? В дальнейшем может потребоваться синхронизация по времени между собой и групп .

2 mrbrooks: Сам не первый день голову ломаю, перечитал главу про потоки в .NET, еще раз разрисовал логику, пока не додумался как организовать синхронизацию по времени.

2 uranpro: Спасибо, прочитаю.
PM MAIL   Вверх
Heinzz
Дата 11.9.2009, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



-Создайте таймер
-по событию таймера:
     -остановите его
     -запустите все потоки
     -дождитесь завершения всех потоков
     -снова запустите таймер





--------------------
user posted image
PM MAIL   Вверх
Экскалупатор
Дата 12.9.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



в принципе задача понятна, только теперь вопрос для чего столько потоков? если файлы обрабатываются по очереди(а они таки так это и делают), и основной поток ждет пока закончатся остальные то может лучше без них? ну или сделать два потока? но не 50 же... или я все таки не совсем понял специфику приложения...
PM MAIL ICQ   Вверх
graham
Дата 12.9.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.4.2009

Репутация: нет
Всего: нет



2 Экскалупатор: да-да, вчера тоже до этого дошел, постоянно в голову приходят сначала сложные варианты решения. Вместо ведущего и кучи ведомых, буду запускать в одном потоке и последовательно их обрабатывать.

2 Heinzz: Таймер который Threading.Timer?
PM MAIL   Вверх
Экскалупатор
Дата 13.9.2009, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



если есть форма, то она будет подвисать, если все запихать в один поток(форма не будет отвечать пока не закончиться обработка файлов), наверное лучше сделать поток для формы и поток для обработки файлов (может тот же BackgroundWorker).
PM MAIL ICQ   Вверх
Heinzz
Дата 13.9.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



таймер простой. Его можно взять, например, в дизайнере формы


--------------------
user posted image
PM MAIL   Вверх
graham
Дата 5.10.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 17.4.2009

Репутация: нет
Всего: нет



Спасибо, с потоками разобрался. 
Таймер, в моем случае, надо использовать Threading.Timer, а не из дизайнера формы. Т.к. у первого точность лучше.

Это сообщение отредактировал(а) graham - 5.10.2009, 09:00
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1278 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.