Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2013, 14:37   #1
MAGISTR-Shuba
Новичок
Джуниор
 
Регистрация: 15.02.2013
Сообщений: 2
Вопрос Параллельная многопоточность

Доброго времени суток =)
Столкнулся с такой проблемой - есть определенное количество картинок, которые будут скачиваться функцией, которой мы будем передавать ссылку на эту картинку. У меня есть лист потоков и очередь этих самых ссылок, которые нужно передать для загрузки. При том так, чтобы каждый поток скачивал равное количество картинок. К примеру - Поток 1 - передает на скачку из листа 1,2,3 картинку, Поток 2 - 4,5,6 картинку, и так далее. При этом, должно быть распределение между потоками, которые будут регулироваться пользователем - например, 20 картинок и 2 потока - каждый поток качает по 10 картинок (или сколько сможет)... Т.е. потоки ДОЛЖНЫ присутствовать..

Делал так:
Код:
for (int i = 0; i < totalThreads; i++) // потоки
            {
                threads.Add(new Thread(Potok));
            }
            Parallel.For(0, totalImage, k => 
            {
                 while (totalImage != uploadsTotal)
                {
                    for (int j = 0; j < totalThreads; j++)
                    {
                        if (!threads[j].IsAlive)
                        {
                            try
                            {
                                threads[j].Start(itog.Dequeue()); // отсылаем в функцию загрузки строку
                            }
                            catch (Exception e)
                            {
                                Trace.WriteLine("Caught ", e.Message);
                            }
                         }
                      }
                 }
            });
Подскажите, где что нужно поменять, что бы сие чудо работало? (я нуб, будьте милосердны)
MAGISTR-Shuba вне форума Ответить с цитированием
Старый 16.02.2013, 13:03   #2
Демон
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 17
Стрелка

Привет!
Если ты пользуешься классом Parallel, то ты уже параллелизируешь, тебе нет надобности вообще использовать сами потоки. Скажем, будет выглядеть примерно так:
Где-то у тебя есть метод для обработки каждого url:
Код:
private void ProcessUrl(string url)
запускать его параллельно можно примерно так:
Код:
var urls = new List<string>
                           {
                               "ggg",
                               "hhh",
                               "yyy"
                           };

var options = new ParallelOptions {MaxDegreeOfParallelism = 2}; // 2 потока
Parallel.ForEach(urls, options, ProcessUrl); // параллельный foreach, перебирает твой лист и для каждого вызывает этот самый метод
Если тебе нужно, чтобы не замораживало основной поток приложения, следует обернуть этот foreach:
Код:
var factory = new TaskFactory(); // где-то объявить
factory.StartNew(() => Parallel.ForEach(urls, options, ProcessUrl));
Демон вне форума Ответить с цитированием
Старый 17.02.2013, 16:09   #3
MAGISTR-Shuba
Новичок
Джуниор
 
Регистрация: 15.02.2013
Сообщений: 2
По умолчанию

Пасиба)
только, почему-то, не до конца качает некоторые..
MAGISTR-Shuba вне форума Ответить с цитированием
Старый 17.02.2013, 17:35   #4
Демон
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 17
Стрелка

Значит проблема в самом вызываемом методе
Демон вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параллельная работа таймера bor-47 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 18.01.2013 23:58
Параллельная программа по методу ближайший сосед. Макси26 Паскаль, Turbo Pascal, PascalABC.NET 1 05.03.2012 17:33
параллельная сортировка бетчера kella4ka Общие вопросы C/C++ 0 31.05.2011 16:05
неправильная параллельная конфигурация Gigoga Помощь студентам 0 21.04.2011 00:02
Параллельная сортировка. JSort Общие вопросы по Java, Java SE, Kotlin 0 09.03.2011 17:21