Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 21

Потоки c#, статистика потоков

24.06.2015, 19:47. Показов 1376. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Задача такая: нужно прочитать слова из файла в контейнер, затем создать три потока, каждый из которых берет слова из контейнера и записывает в свой файл(для каждого потока отдельный). Также еще нужно в конце вывести статистику потоков: сколько каждый поток слов записал. Я сделал вроде все, кроме статистики потоков, не знаю, как это сделать. Помогите, если это возможно)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
 
namespace test2
{
    class Program
    {
        static List<string> text = new List<string>();
        static object locker = new object();
        static int[] counts;
        static void Main(string[] args)
        {
            FileStream fs = new FileStream("in.txt", FileMode.Open);
            StreamReader sr = new StreamReader(fs);
            string tmp = sr.ReadToEnd();
            string[] temp = tmp.Split(new char[] { ' ', ',', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string d in temp)
                text.Add(d);
            new Thread(ToUpperAndPrint).Start("out.txt");
            new Thread(ToUpperAndPrint).Start("out1.txt");
            new Thread(ToUpperAndPrint).Start("out2.txt");
        }
        static void ToUpperAndPrint(object filename)
        {
            lock (locker)
            {
                for (int i = 0; i < text.Count; i++)
                {
 
                    File.AppendAllText(filename.ToString(), text[i].ToString().ToUpper());
                    File.AppendAllText(filename.ToString(), "\n");
                    text.RemoveAt(i);
                }
            }
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.06.2015, 19:47
Ответы с готовыми решениями:

Потоки. Синхронизация потоков.
Нужно синхронизировать действия потоков, например в доступе к переменной &quot;а&quot;. Где ставить локеры: в потоках, где мы будем изменять...

Создаются не все потоки (пул потоков)
Создаю потоки: for (int i = 0; i &lt; Convert.ToInt32(countPool.Text); i++) { toolStripStatusLabel1.Text =...

Многопоточность, Пул потоков: Запускаются следующие потоки не дождавшись предыдущих
Читаю из файла по строкам некий параметр для передачи в функцию, задаю кол-во потоков, запускаю потоки и нужно дождаться завершения...

7
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
24.06.2015, 19:53
snowfall, вопрос.
1. А зачем вам три потока, выигрыша тут абсолютно никакого, все же лочится на одной блокировке.
2. Ну и конструкция foreach() для добавления всех слов в лист, конечно, бесподобна)))
0
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 21
24.06.2015, 20:31  [ТС]
insite2012, мне нужно, чтобы три потока асинхронно брали данные из контейнера со словами, условие такое. Не могу я разобраться со статистикой потоков, как это вообще реализовать?
На добавление не смотрите, знаю, что смешно)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
24.06.2015, 20:34
Цитата Сообщение от snowfall Посмотреть сообщение
мне нужно, чтобы три потока асинхронно брали данные из контейнера со словами
snowfall, да все дело в том, что, как я уже сказал, у вас общая блокировка на объекте-контейнере, и прироста скорости вы не получите. Один поток отработал бы точно так же, как и три.
0
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 21
24.06.2015, 20:39  [ТС]
insite2012, я понимаю, но мне это неважно совсем. Мне нужно только узнать, как сделать статистику потоков, т.е. сколько слов каждый поток записал.
0
79 / 79 / 12
Регистрация: 07.01.2012
Сообщений: 167
24.06.2015, 22:12
прочитайте записанные потоками файлы, сколько в них слов? Столько соответственно и записал поток.
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
26.06.2015, 23:59
Цитата Сообщение от snowfall Посмотреть сообщение
Мне нужно только узнать, как сделать статистику потоков, т.е. сколько слов каждый поток записал
Обычно при многопоточной обработке чтобы видеть, что делается, я в потоке вызываю событие в начале работы, каждые 10 секунд и в конце обработки. А в обработчике события обновляю UI соответствующим образом, показывая, у какой задачи какой прогресс выполнения. Делегат, придуманный для события, параметризуется, кроме всего прочего, признаком задачи (у вас этом может быть признаком или номером потока). Вы вместо UI можете сбрасывать в консоль или в файл, только надо учесть, что информация приходит из разных потоков.

Такой пример почти в любой книжке есть в главе про потоки, надо лишь натянуть его к вашей задаче.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
27.06.2015, 11:25
Цитата Сообщение от snowfall Посмотреть сообщение
я понимаю, но мне это неважно совсем
Современный студент просто бесподобен
Сказали сделать три потока - я сделал три потока. Они не работают одновременно? Ну и что? Это ж не важно совсем
ТС вы вообще в курсе, зачем даются задания на многопоточность?
Цитата Сообщение от snowfall Посмотреть сообщение
мне нужно, чтобы три потока асинхронно брали данные из контейнера со словами, условие такое
Ну так у вас этого и близко нет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.06.2015, 11:25
Помогаю со студенческими работами здесь

Правильно создать пул потоков, запустить эти потоки одновременно и дождаться их завершения
Добрый день! Подскажите пожалуйста, как правильно создать пул потоков, запустить эти потоки одновременно и дождаться завершения всех...

Какие потоки лучше при обработки небольшого объёма информации, но при большом количестве потоков
Собственно заинтересовали следующие вопросы: Какой из потоков работает быстрее? Какой из потоков стартует быстрее? Какие потоки...

Потоки. Синхронизация потоков
Доброе время суток! Возникло недопонимание темы потоков. Набросал упрощенный вариант моей задачи (без потоков): using System; ...

Пул потоков и потоки одновременно
Мне интересно безопасно ли использовать пул потоков и обыкновенные потоки одновременно? Например, пул потоков чисто для общения клиентов с...

Класс Thread, потоки синхронизация потоков и т.д
Имеется код: Модуль Unit1.cpp (в нем запускается поток) //------------------------------------------------------ //... ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru