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

Правильная остановка потоков

21.02.2014, 21:10. Показов 3267. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужно правильно остановить потоки(на кнопку стоп(!)), чтобы они завершились и можно было закрыть программу без прерывания.
так создаю потоки:
C#
1
2
3
4
5
6
7
8
9
10
private void start_Click(object sender, EventArgs e)
        {
                for (int i = 0; i <= threads.Value; i++)
                {
                    Thread th = new Thread(new ThreadStart(this.Regging));
                    th.IsBackground = true;
                    th.Start();
                }
            
        }
сама функция:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void Regging()
        {
            try
            {
                using (var request = new HttpRequest())
                {
                    бла бла бла              
                }
            }
            catch
            {
 
            }
            finally
            {
                Regging();
            }
        }
пытался через th.Join();, но так не выходит( нужно как-то вытащить номера потоков и их завершать, а незнаю как... msdn не помог, по моему способу создания в гугле информации нет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.02.2014, 21:10
Ответы с готовыми решениями:

Остановка потоков
Имеется консольное приложение, в котором запускается несколько потоков. Сделать так, чтобы при нажатии enter все потоки остановились. ...

Остановка потоков
У меня в программе есть некий код, создающий новый поток вот этого кода: try { Socket user; clients = new...

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

5
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
21.02.2014, 21:15
Цитата Сообщение от d0k3r Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
using (var request = new HttpRequest())
 {
 бла бла бла 
 }
finally
{
  Regging();
}
После выполнения поток завершается и ОС освобождает его ресурсы. Зачем его останавливать?

Добавлено через 1 минуту
К тому же они фоновые, при завершении основного в любом случае завершат свою работу.
0
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 12
21.02.2014, 21:17  [ТС]
у меня в finally он опять создаётся. нужно или правильно в самом начале их создать, или найти решение, чтобы их можно было останавливать, не закрытием программы.

суть программы: задаем 10 потоков и программа работает постоянно с этими потоками, но нужно их остановить и только потом закрыть программу. похоже на регер\парсер и т.д.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
21.02.2014, 21:21
Как вариант: поток завершается, когда завершается работа метода. Можно повесить флаг , перед запуском потоков flag = false; при нажатии на кнопку flag = true, а методе сделать проверку if (flag)return;

Добавлено через 11 секунд
Как-то так.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.02.2014, 21:26
d0k3r, используй пул потоков, или как-то так:
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
42
43
  class CancellableThread
    {
        private readonly Thread thread;
        private bool run;
 
        public CancellableThread(Action threadStart)
        {
            thread = new Thread(()=>
                     {
                         while (run)
                         {
                             threadStart();
                         }
                     });
        }
 
        public CancellableThread(Action<object> parameterizedThreadStart)
        {
            thread = new Thread(obj =>
                                {
                                    while (run)
                                    {
                                        parameterizedThreadStart(obj);
                                    }
                                });
        }
 
        public void Start()
        {
            run = true;
            thread.Start();
        }
 
        public void Start(object obj)
        {
            thread.Start(obj);
        }
 
        public void Stop()
        {
            run = false;
        }
    }
задаешь задачу, он её будет делать, пока не отменишь. Но рекурсивный вызов из finally нужно будет убрать, и без него будет работать.
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
21.02.2014, 21:27
Оо, забыл, есть же еще СancellationTokenSource class.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.02.2014, 21:27
Помогаю со студенческими работами здесь

Взаимодействие двух потоков и их остановка при выполнении условия
Такой вопрос: Есть два потока, каждый из которых меняет некоторые значения в массиве. Надо это делать до тех пор, пока массивы не...

Не правильная работа потоков
Добрый день. Пишу программу с помощью которой хочу записывать фото и видео. Для этого подключил библиотеку Aforge. Фото и видео...

Правильная остановка потока
Есть поток, в которым выполняется запрос. При закрытии формы, нужно останавливать выполнение этого потока. Как правильно это сделать? ...

Остановка потоков
Привет всем, я новичок на этом форуме и мне нужна Ваша помощь. У меня есть многопоточное приложение на делфи с использованием критической...

Остановка потоков
Вот такой вопрос: Допустим есть 1 класс, наследуемый от Runable: //поток слежения за временем class Time implements Runnable { ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru