![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| graham |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 17.4.2009 Репутация: нет Всего: нет |
В основной форме находятся настройки и кнопка. В зависимости от настроек надо запустить какое-то количество потоков на обработку. Количество потоков примерно от 1 до 50. Во время отработки потоков возможно изменение каких-то параметров, т.е. необходима еще одна форма. Кроме того, на второй форме надо еще и прогрессбары отображать для каждого потока отдельно.
Не представляю как сделать передачу данных для запуска потока в другую форму и далее запустить потоки. Вижу пока так: Получается в первой форме формирую данные на обработку и складываю их в массивы экземляров класса (класс данных универсальный для запуска любых потоков текущей задачи). Передаю во вторую форму ссылку на экземляр класса в консруктор второй формы. Во второй форме динамически создаю интерфейс для управления потоками и прогрессбары, в зависимости от того, сколько в массиве заполнено данных. Создаю нужное количество потоков ( вот тут вопрос, как лучше обрабатывать, в Thread или в BackgroundWorker? ) и запускаю их. Как сделать чтобы при изменении настроек во второй форме потоки получили новые настройки? Может есть какой-то другой более легкий шаблонный способ до которого я сам не дошел, подскажите как лучше сделать. Что выбрать Thread или BackgroundWorker? |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
на сколько я себе это представляю Thread и BackgroundWorker это суть одно и тоже, выполнение кода в отдельном потоке. а можно поинтересоваться для чего столько потоков (от1 до 50)? просто не встречал задач где могло бы понадобиться 50 потоков.
|
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 17 Всего: 306 |
||||
|
||||
| uranpro |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 571 Регистрация: 7.5.2008 Где: Moscow city Репутация: нет Всего: 1 |
-------------------- I want a perfect soul |
|||
|
||||
| graham |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 17.4.2009 Репутация: нет Всего: нет |
2 Экскалупатор: Нужно обрабатывать группы файлов, каждая группа может обрабатываться параллельно, каждый обработанный фал укладывается в свой отдельный массив. В группе один поток ведущий - задает дополнительные параметры для обработки ведомыми потоками. После отработки ведущим потоком своих данных он должен выдержать паузу на заданное время, после этого запускаются ведомые. Пока последний ведомый поток в группе не закончил обработку шага, ведущий в группе не может запустить обработку нового шага и задать параметры для следующей обработки ведомыми. В общем как данные синхронизировать я понял, а вот как разграничить работу по времени нет. Если уж Sleep не гарантирует запуск потока через нужный интервал времени, тогда как? В дальнейшем может потребоваться синхронизация по времени между собой и групп .
2 mrbrooks: Сам не первый день голову ломаю, перечитал главу про потоки в .NET, еще раз разрисовал логику, пока не додумался как организовать синхронизацию по времени. 2 uranpro: Спасибо, прочитаю. |
|||
|
||||
| Heinzz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 3 Всего: 9 |
-Создайте таймер
-по событию таймера: -остановите его -запустите все потоки -дождитесь завершения всех потоков -снова запустите таймер |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
в принципе задача понятна, только теперь вопрос для чего столько потоков? если файлы обрабатываются по очереди(а они таки так это и делают), и основной поток ждет пока закончатся остальные то может лучше без них? ну или сделать два потока? но не 50 же... или я все таки не совсем понял специфику приложения...
|
|||
|
||||
| graham |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 17.4.2009 Репутация: нет Всего: нет |
2 Экскалупатор: да-да, вчера тоже до этого дошел, постоянно в голову приходят сначала сложные варианты решения. Вместо ведущего и кучи ведомых, буду запускать в одном потоке и последовательно их обрабатывать.
2 Heinzz: Таймер который Threading.Timer? |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
если есть форма, то она будет подвисать, если все запихать в один поток(форма не будет отвечать пока не закончиться обработка файлов), наверное лучше сделать поток для формы и поток для обработки файлов (может тот же BackgroundWorker).
|
|||
|
||||
| Heinzz |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 381 Регистрация: 12.12.2008 Где: .net Репутация: 3 Всего: 9 |
таймер простой. Его можно взять, например, в дизайнере формы
|
|||
|
||||
| graham |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 17.4.2009 Репутация: нет Всего: нет |
Спасибо, с потоками разобрался.
Таймер, в моем случае, надо использовать Threading.Timer, а не из дизайнера формы. Т.к. у первого точность лучше. Это сообщение отредактировал(а) graham - 5.10.2009, 09:00 |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |