С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/16: Рейтинг темы: голосов - 16, средняя оценка - 4.75
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
1

Ожидание завершения threadpool - где ошибка

22.05.2014, 21:56. Показов 3246. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Есть массив файлов aFiles, который хочу обработать методом check() через ThreadPool. При этом мне нужно, чтобы программа подождала завершения всех процессов. Пишу:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    int c = 0;
    int FilesCount = aFiles.Length;
 
    DateTime dtStart = DateTime.Now;
    var handles = new ManualResetEvent[FilesCount];
    foreach (string file in aFiles)
    {
        handles[c] = new ManualResetEvent(false);
        c++;
 
        var currentHandle = handles[c];
        ThreadPool.QueueUserWorkItem(arg =>
        {
            try
            {
                Check((object)file);
            }
            finally { currentHandle.Set(); }
        });
    }
 
    WaitHandle.WaitAll(handles);

Но на строчке:
C#
1
var currentHandle = handles[c];
выдает, что индекс находится за пределами массива. Подскажите, что неправильно в коде?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.05.2014, 21:56
Ответы с готовыми решениями:

Ожидание завершения записи в файл
Доброго времени суток. Сразу к сути: нужно определить, что некая сторонняя программа завершила...

Ошибка при закрытии соединения после завершения потока, где это соединение было открыто
У меня в программе есть обновляющаяся статистика, и если пользователь запустил обновление, а потом...

Ожидание завершения Task
Аналогичная проблема как тут https://www.cyberforum.ru/csharp-beginners/thread1287711.html...

Ожидание завершения Task
Здравствуйте, возникла проблемка, гугл не помог. Есть похожие проблемы, но их решение мне не...

17
Эксперт .NET
17793 / 12944 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
23.05.2014, 03:51 2
C#
1
2
c++;
var currentHandle = handles[c];
Попробуйте угадать, что произойдет на последней итерации цикла
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
23.05.2014, 09:57  [ТС] 3
Я пробовал писать:
C#
1
var handles = new ManualResetEvent[FilesCount-1]
но то же самое происходит
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
23.05.2014, 10:04 4
Видимо до NullReferenceException не успевает дойти

Замените
C#
1
2
c++;
        var currentHandle = handles[c];
на
C#
1
var currentHandle = handles[c++];
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
23.05.2014, 10:21  [ТС] 5
Да, похоже, в трех соснах заблудился. Сейчас попробую...

Добавлено через 3 минуты
Сейчас выдает другую ошибку:

Необработанное исключение типа "System.NotSupportedException" в mscorlib.dll
Дополнительные сведения: Метод WaitAll для нескольких дескрипторов в потоке STA не поддерживается.
На последней строке:
C#
1
WaitHandle.WaitAll(handles);
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
23.05.2014, 10:34 6
Suppir, ну, он и сказал, что не будет ждать несколько WaitHandle в основном потоке программы...

Добавлено через 56 секунд
Я бы посоветовал на Task переучиваться (если не .NET 2.0)
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
23.05.2014, 10:39  [ТС] 7
Spawn,

Попробовал удалить [STAThread] из Main, теперь работает, но форма виснет до окончания ThreadPool. Подскажите, как этот ThreadPool в отдельном потоке вызывать, и чтобы быстро работал?


По поводу NETF2.0. - я в безвыходной ситуации Пишу офисные программы, которые ставят в офисы. И получается, что 90% парка машин - лицензионные Windows XP, потому что дешевле купить наклейку за 1 тыс. рублей Windows XP, чем покупать Windows 8 за 5 тыс. рублей. Также есть машины с Windows 7 (там NET Framework 3.5). На Windows 8 машин практически нет. Вот и выходит, что почти везде стоит NETF 2.0, иногда 3.5, но не выше. Приходится писать на минимальной версии. Серверные части (которые у меня стоят) пишу вообще на 4.5. Но основные программы все на 2.0.
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
23.05.2014, 10:52 8
Suppir, сам для гос. структур пишу, но 3.5 SP1 прописано в контракте, так что пинаем всё и вся...

Что касается текущего случая... делайте некий счётчик, который будете изменять и как только значение достигнет максимума/минимума, сигнализируйте об окончании, WaitHandle соответственно 1 создаёте и WaitOne поднимаете.
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
23.05.2014, 11:02  [ТС] 9
Спасибо, попробую.

Добавлено через 4 минуты
Я теперь понимаю, почему Кристиан Гислер свой Total Commander на Delphi 3 до сих пор пишет - для совместимости со старыми OS.
0
Spawn
23.05.2014, 11:17
  #10

Не по теме:

Suppir, писать можно хоть на асме, для каждой задачи свои средства...

0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
23.05.2014, 17:18 11
Suppir, на XP 3.5 встает точно, 4.0 встает на SP3 насколько я помню.
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
23.05.2014, 20:37  [ТС] 12
Psilon,

да, 4.0 даже можно поставить при желании. Но я продаю по схеме try & buy. Когда пользователь скачивает программу, а она сразу не работает и требует установки разных библиотек, сервис-паков и фреймворков, то желание приобрести несколько уменьшается.
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
23.05.2014, 20:39 13
Suppir, известный мод XVM для игры world of tanks использует .Net 3.5+, и они как-то справились с этой проблемой Я бы на вашем месте не парился. 3.5 - уже можно использовать, но 2.0 - забудьте
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
23.05.2014, 20:41 14
Цитата Сообщение от Suppir Посмотреть сообщение
а она сразу не работает и требует установки разных библиотек, сервис-паков и фреймворков, то желание приобрести несколько уменьшается.
Инсталлятор наворотить, дабы всё поставил... скачают, конечно, поболее, но и программа лучше будет.
1
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
23.05.2014, 23:32 15
если юзеру нужна программа он поставит всё что угодно, некоторым не влом винду переустановить..
а если оно ему не надо - нефик его записывать к себе в "пользователи"
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
24.05.2014, 13:56  [ТС] 16
m0nax,
есть куча организаций, где у пользователей даже интернета нет. Т.е. админ или начальник отдела скачивает программы. Пробует - не запускается, или - ой, нужно на 100 компов дополнительно сервис паки ставить - ну его нафиг. А если сразу запускается и работает, и показывает хороший результат, то другое дело.

Цитата Сообщение от m0nax Посмотреть сообщение
а если оно ему не надо
Пользователи зачастую сами не знаю, что им надо, пока не покажешь.
0
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
24.05.2014, 19:57 17
Suppir, интеграция сервис паков рулит
0
Администратор
Эксперт .NET
9624 / 4768 / 762
Регистрация: 17.04.2012
Сообщений: 9,620
Записей в блоге: 14
26.05.2014, 22:13 18
Psilon, всё искал точные требования для .NET 4.0, здесь http://msdn.microsoft.com/ru-r... .100).aspx недостаточно. Вот:
~1. System Requirements

1.1 Supported Architectures
x86
x64
ia64 (some features are not supported on ia64, for example, Windows Presentation Foundation (WPF))

1.2 Supported Operating Systems
Windows XP SP3
Windows Server 2003 SP2
Windows Vista SP1
Windows 7
Windows Server 2008 (not supported on Server Core Role)
Windows Server 2008 R2 (not supported on Server Core Role)

1.3 Hardware Requirements
Minimum Available Hard Disk Space:
x86: 850 MB
x64: 2 GB
Processor and RAM:
Minimum: Pentium 1 GHz with 512 MB RAM

1.4 Other System Requirements
Windows Installer 3.1
Internet Explorer 5.01

Тут Microsoft .NET Framework 4 Readme.htm
0
26.05.2014, 22:13
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2014, 22:13
Помогаю со студенческими работами здесь

Ожидание завершения всех потоков
Здравствуйте! Помогите, пожалуйста! В отдельных задачах (потоках далее) выполняются какие-то...

Простой инсталлер, ожидание завершения процесса
Всем доброго. Пишу небольшой инсталлер, из которого надо установить два приложения (оба внешние,...

Ожидание завершения цикла и выполнение последующих действий
Использую цикл фор для считывания массива, после чего работаю с результатом. string read =...

Ожидание завершения всех асинхронных вызовов Ping.SendAsync
Сканирую локальную сеть по айпишнику, и получаю список IPAddress, которые пингуются : Main...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru