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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2011, 21:29   #1
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию потоки

Проблема с потоками!Как сделать правильно??
Код:
private void button1_Click(object sender, EventArgs e)
        {
            List<string> list = new List<string>();
            StreamReader sr = new StreamReader("ssulki.txt", Encoding.GetEncoding(1251));

            DateTime dold = DateTime.Now;
            while (!sr.EndOfStream)
            {
                list.Add(sr.ReadLine());
                if (list.Count == 10)
                {
                    Thread newThread = new Thread(new ParameterizedThreadStart(potok));
                    newThread.Start(list);
                    list = new List<string>();
                }

            }
            sr.Close();
            TimeSpan sp = DateTime.Now - dold;
            MessageBox.Show(sp.TotalSeconds.ToString());
        }

        void potok(object l)
        {
            List<string> lis = (List<string>)l;
            WhitePrideWorldWide.HttpClient httpClient = new WhitePrideWorldWide.HttpClient();
            httpClient.encoding = Encoding.UTF8;
            string html = "";
            for (int i = 0; i < lis.Count; i++)
            {
                html = httpClient.Get(lis[i] + "/data/rss");
            }
        }
Cpluser вне форума Ответить с цитированием
Старый 15.02.2011, 10:11   #2
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Я так понял поток выполняетса но за какое время мне нада посчитать
DateTime dold = DateTime.Now;
код
TimeSpan sp = DateTime.Now - dold;
А оно выдает 0.
Cpluser вне форума Ответить с цитированием
Старый 15.02.2011, 10:59   #3
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

странный код
Код:
if (list.Count == 10)
                {
                    Thread newThread = new Thread(new ParameterizedThreadStart(potok));
                    newThread.Start(list);
                    list = new List<string>();
                }
т.е сначала создаем поток, выдаем ему список...и тут же очищаем этот список
Тогда уж надо как-то скопировать список, хотя бы ToArray или CopyTo какой нибудь

Вообще стоит использовать ThreadPool вместо new Thread
m0nax вне форума Ответить с цитированием
Старый 15.02.2011, 11:07   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

Я бы вот так написал
Код:
        private void button1_Click(object sender, EventArgs e)
        {
            List<string> list = new List<string>();
            using (StreamReader sr = new StreamReader("ssulki.txt", Encoding.GetEncoding(1251)))
            {
                while (!sr.EndOfStream)
                {
                    list.Add(sr.ReadLine());

                    if (list.Count == 10)
                    {
                        ThreadPool.QueueUserWorkItem(potok, list.ToArray());
                        list.Clear();
                    }
                }
                sr.Close();
            }
           // MessageBox.Show(sp.TotalSeconds.ToString());
        }

        void potok(object l)
        {
            string[] lis = (string[])l;
            WhitePrideWorldWide.HttpClient httpClient = new WhitePrideWorldWide.HttpClient();
            httpClient.encoding = Encoding.UTF8;
            string html = "";

            for (int i = 0; i < lis.Length; i++)
            {
                html = httpClient.Get(lis[i] + "/data/rss");
            }
        }
А время..если нужно засечь сколько выполняется каждый поток засекать надо в самом потоке, а если сколько выполняются все вместе придется много мудрить ибо сложно определить когда все потоки закончили свою работу
m0nax вне форума Ответить с цитированием
Старый 15.02.2011, 11:16   #5
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Ну а как мне узнать в потоках быстрей ето выполнилось???
Cpluser вне форума Ответить с цитированием
Старый 15.02.2011, 22:17   #6
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

класс System.Threading.Tasks.Parallel с методами For (), ForEach () юзай для паралельных вычисленний...
dampirik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Потоки С++ Aleksin Помощь студентам 1 07.11.2010 18:15
Потоки Djeka(c) Помощь студентам 13 28.10.2010 08:28
Потоки Aleksey1989 Помощь студентам 2 27.10.2010 10:07
потоки sergei64_89 Помощь студентам 2 20.10.2010 02:08
потоки Владимир1988 Помощь студентам 0 08.02.2010 23:12