Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/48: Рейтинг темы: голосов - 48, средняя оценка - 4.54
2 / 2 / 1
Регистрация: 16.05.2013
Сообщений: 69

Повторный запуск потоков

16.05.2013, 16:36. Показов 9886. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем. Необходима ваша помощь в следующем вопросе. Есть некий гипотетический код:

C#
1
2
3
4
5
6
7
8
9
10
11
while (true)
 {
 Thread[] Thrd = new Thread[10];
 for (int i = 0; i < 10; i++)
 {
 Thrd[i] = new Thread(f);
 Thrd[i].Start();
 }
//здесь некий код, проверяющий состояние потоков и когда завершены то переходим к задержке ниже
System.Threading.Thread.Sleep(5000);
 }
Мне необходимо чтоб создавались потоки, затем, после завершения, выполнялась пауза и цикл бы начинал все заново. Но потоки не создаются, лишь первая итерация получается. Подскажите, пожалуйста, как реализовать мою задачу правильно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2013, 16:36
Ответы с готовыми решениями:

Повторный запуск метода
Это часть кода для запуска wcf службы. Запускаю вызывая Start(), останавливаю соответственно через Stop(). Все это находится в отдельном...

Как запретить повторный запуск программы
При загрузке формы запретить запуск этой формы еще раз , допустим что бы выводило &quot;Это программа уже запущена!&quot;.

Как правильно блокировать повторный запуск асинхронной функции ?
Допустим есть асинхронная функция, вызываемая по нажатию кнопки пользователем. Функция не быстрая, ходит по http Как можно запретить...

8
 Аватар для dev-a1056
228 / 95 / 27
Регистрация: 16.04.2013
Сообщений: 315
Записей в блоге: 2
16.05.2013, 18:59
Цитата Сообщение от SharpA Посмотреть сообщение
Но потоки не создаются, лишь первая итерация получается.
поясни.
Я вот вижу, что на каждой итерации ты создаешь поток и запускаешь на выполнение.

Добавлено через 4 минуты
И давай разберемся с терминологией:
Есть понятие "создать поток (создать экземпляр класса Thread)" и запустить поток на выполнение.

Если тебе требуется, чтобы все потоки выполнились до sleep, то можно вызвать экземплярный метод Join() у каждого потока.
Можно крутится в Спин блокировке и проверять состояние потоков(не рекомендуется, но можно).
0
2 / 2 / 1
Регистрация: 16.05.2013
Сообщений: 69
16.05.2013, 19:09  [ТС]
Мне необходимо чтобы потоки создавались, выполянлись, затем, после их завершения, всех до одного(проверяю значение Thrd[i].IsAlive), выполнялся sleep и цикл запускался поновой. Но я не понимаю как это граммотно выстроить. В том виде что я делаю потоки запускаются, затем завершаются после выполнения, но после sleep, когда цикл делает вторую итерацию, потоки не стартуют. Ведь с каждой новой итерацие создаются новые экземпляры класса Thread, не пойму почему только один проход цикла выполняет их запуск.
0
 Аватар для dev-a1056
228 / 95 / 27
Регистрация: 16.04.2013
Сообщений: 315
Записей в блоге: 2
16.05.2013, 19:13
да быть такого не может.

Добавлено через 15 секунд
покажи весь код
0
2 / 2 / 1
Регистрация: 16.05.2013
Сообщений: 69
16.05.2013, 19:22  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public void CreateThreads(Object count1)
        {
            while (true)
            {
                int count = (int)count1;
                Thread[] Thrd = new Thread[count];
                for (int c = 0; c < count; c++)
                {
                    Thrd[c] = new Thread(func);
                    Thrd[c].IsBackground = true;
                    Thrd[c].Start();
                }
                int mrkr = 0;
                while (true)
                {
                    for (int cnt = 0; cnt < Thrd.Length; cnt++) if (Thrd[cnt].IsAlive) mrkr++;
                    if (mrkr == 0) break;
                    if (this.InvokeRequired) this.Invoke((MethodInvoker)(delegate() { label11.Text = mrkr.ToString(); }));
                    mrkr = 0;
                }
                System.Threading.Thread.Sleep(5000);
            }
        }
Вобщем это функция запускается отдельным потоком который должен контроллировать запуск рабочих потоков. Сразу в первом цикле мы создаем и запускаем указанное колличество потоков. Последующий цикл у меня постоянно проверяет колличество активных потоков и как только ни останется ни одного активного-происходит выход из цикла подсчета потоков и отрабатывает Sleep. После Sleep внешний цикл начинает вторую итерацию, создаются экземпляры потоко, запускаются, но запуска нет. программа стоит на месте.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.05.2013, 21:06
SharpA,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void CreateThreads(Object count1)
        {
            Thread[] Thrd = new Thread[count];
            while (true)
            {
                int count = (int)count1;                
                for (int c = 0; c < count; c++)
                {
                    Thrd[c] = new Thread(func);
                    Thrd[c].IsBackground = true;
                    Thrd[c].Start();
                }
                Array.ForEach(Thrd, t => t.Join());
                Thread.Sleep(5000);
            }
        }
0
2 / 2 / 1
Регистрация: 16.05.2013
Сообщений: 69
17.05.2013, 18:37  [ТС]
Не помогло, все также потоки заново не создаются. При отладке во второй итерации пишет Exception с описанием что потока не существует.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.05.2013, 20:46
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void CreateThreads(Object count1)
        {
            int count = (int)count1;   
            while (true)
            {
                var list = new List<Thread>(12);                             
                for (int i = 0; i < count; i++)
                {
                    var t = new Thread(func) {IsBackground = true};
                    list.Add(t);
                    t.Start();
                }
                list.ForEach(t => t.Join());
                Thread.Sleep(5000);
            }
1
2 / 2 / 1
Регистрация: 16.05.2013
Сообщений: 69
17.05.2013, 20:55  [ТС]
Большое спасибо. Разобрался)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2013, 20:55
Помогаю со студенческими работами здесь

Повторный запуск процедуры при неверном вводе значения
Всем привет! Не могу запустить программу заново. Многие способы использовал, но программа все равно не хочет работать. Прошу подкинуть...

Запуск бесконечного числа потоков
Помогите чайнику serzh82saratov, не нужно задавать свои вопросы в чужих темах, особенно если эти вопросы к теме не относятся. using...

Повторный запуск внешней консоли на MacBook
Добрый день, при повторном запуске программы во Внешней консоли Visual Studio выдаёт данную ошибку: Last login: Fri Oct 25 12:37:16 on...

Как избежать повторный запуск приложения?
Подскажите как можно избежать повторного запуска программы? Поясню: я написал программу, в которой при нажатии кнопки открывается Nero....

Запуск несколько фоновых потоков одновременно
Необходимо заполнять массив из n элементов. Как организовать заполнение массива одновременно в нескольких фоновых потоках. так...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru