Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
215 / 211 / 146
Регистрация: 20.11.2014
Сообщений: 1,184

Упростить код работы с потоками

05.07.2017, 20:15. Показов 1000. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Запускаю сервер в отдельном потоке, в котором запускаются еще потоки, при нажатии на кнопку стоп, надо завершить эти потоки. Сделал так
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
static TcpListener listener =  new TcpListener(IPAddress.Parse("127.0.0.1"), 8005);
        void start(int a)
        {
            Thread clientThread = new Thread(new ThreadStart(startS));
            if (a == 1)
            {
                clientThread.Start();
            }
            else
            {
                clientThread.Abort();
                listener.Stop();
            }
        }
        void startS()
        {
            try
            {
                listener.Start();
                //listBox1.Items.Add("Ожидание подключений...");
                while (true)
                {
                    TcpClient client = listener.AcceptTcpClient();
                    ClientObject clientObject = new ClientObject(client);
                    Thread clientThread = new Thread(new ThreadStart(clientObject.Process));
                    clientThread.Start();
                }
            }
            catch //(Exception ex)
            {
                //listBox1.Items.Add(ex.Message);
            }
            finally
            {
                if (listener != null)
                    listener.Stop();
            }
        }
запускаю start(1); останавливаю start(0);. Но мне как то не очень нравится что TcpListener listener объявлен вне методов, да и адрес в него не очень удобно так передавать. Как можно сделать все красиво?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.07.2017, 20:15
Ответы с готовыми решениями:

Упростить код работы с потоками
Как можно упростить этот код. Public Class Form1 Dim Massiv() As String = IO.File.ReadAllLines("d:\source.txt",...

Определение массива после работы функции - упростить код
Надо переписать вот эту сроку проще. И без ++. for( ; ++c != b; ) *c = (*f)(*(c - 1)); #include <stdio.h> #define N 5 int...

Функции работы с потоками
На WInAPI есть функции приостановление и восстановление потоков - SuspendThread() и ResumeThread() Вопрос:есть ли что нибудь подобное в...

10
215 / 211 / 146
Регистрация: 20.11.2014
Сообщений: 1,184
09.07.2017, 13:02  [ТС]
актуально
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.07.2017, 13:23
Цитата Сообщение от bbq Посмотреть сообщение
мне как то не очень нравится что TcpListener listener объявлен вне методов, да и адрес в него не очень удобно так передавать.
А наличие метода Abort ничем не смущает?

Цитата Сообщение от bbq Посмотреть сообщение
Как можно сделать все красиво?
Какая версия языка?
Какая целевая платформа .NET?
Какого типа приложение (консоль, формы, WPF, WCF, ASP.NET и т.д.)?
0
215 / 211 / 146
Регистрация: 20.11.2014
Сообщений: 1,184
09.07.2017, 13:35  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
А наличие метода Abort ничем не смущает?
Да вроде нет, или поток так не завершают?
Цитата Сообщение от kolorotur Посмотреть сообщение
Какая версия языка?
Какая целевая платформа .NET?
Какого типа приложение (консоль, формы, WPF, WCF, ASP.NET и т.д.)?
6.0
пока пишу на 4.5, но потом уменьшу до максимально возможной.
форма
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.07.2017, 14:24
Цитата Сообщение от bbq Посмотреть сообщение
Да вроде нет, или поток так не завершают?
Ну это примерно как выключить телевизор выстрелом из дробовика.
Телевизор перестанет работать, но последствия этого предсказать сложно.

Цитата Сообщение от bbq Посмотреть сообщение
пока пишу на 4.5, но потом уменьшу до максимально возможной.
Зачем? Лучше наоборот увеличить до максимально последней. Зачем в прошлом веке сидеть?

Цитата Сообщение от bbq Посмотреть сообщение
форма
Я бы сделал все на асинхронных вызовах: не придется возиться с потоками и ресурсы системы будут лучше использованы.
Сейчас, к примеру, у вас на каждого клиента создается отдельный поток, а это одного только стека 1МБ. После чего каждый из этих потоков основную часть времени будет спать, ожидая входящих данных. Нерационально как-то.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
09.07.2017, 14:30
Цитата Сообщение от kolorotur Посмотреть сообщение
Лучше наоборот увеличить до максимально последней. Зачем в прошлом веке сидеть?
Если приложение не для саморазвития, а для пользователей, и автор заинтересован в его распостранении (а тем более, если оно коммерческое) - именно так и следует поступать (использовать минимально возможную версию .NET).
Я понимаю, что меня сейчас закидают тапками, но ОС Windows XP еще много где используется, и используя версию .NET выше 4.0, вы потеряете часть своих пользователей.
0
215 / 211 / 146
Регистрация: 20.11.2014
Сообщений: 1,184
09.07.2017, 16:05  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Я бы сделал все на асинхронных вызовах
поделитесь примером пожалуйста
0
 Аватар для 1231231ghacking
102 / 106 / 62
Регистрация: 19.11.2015
Сообщений: 380
09.07.2017, 16:13
bbq, https://metanit.com/sharp/tutorial/13.3.php
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
09.07.2017, 16:16
Цитата Сообщение от bbq Посмотреть сообщение
поделитесь примером пожалуйста
Для какой версии .NET?
Я не знаю, до какой версии вы потом планируете понижать код, но некоторый функционал, имеющийся в поздних версиях, отсутствует в ранних.
Кстати, если планируете понижать код, то лучше сразу начинайте писать под необходимую версию платформы, иначе потом могут потребоваться очень серьезные изменения, вплоть до полного переписывания.
0
215 / 211 / 146
Регистрация: 20.11.2014
Сообщений: 1,184
09.07.2017, 16:18  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Для какой версии .NET?
4.5
0
215 / 211 / 146
Регистрация: 20.11.2014
Сообщений: 1,184
19.07.2017, 21:29  [ТС]
актуально
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.07.2017, 21:29
Помогаю со студенческими работами здесь

Простой пример работы с потоками
На разных форумах рассматриваются конкретные задачи, в которых нужно использовать поток. Хотелось бы не очень вникая в детали...

Программа для работы с потоками
Нужно написать программу работающую как минимум с двумя потоками - например, на экране появляются два стакана, на дно которых падают...

Комментарии к коду работы с потоками
Здравствуйте. Помогите пожалуйста понять код. Прокоментируйте вообще как вообще он работает. public class MyThread { Class1...

Вопрос по поводу работы с потоками
Вопрос такой, по поводу обращения к визуальным компонентам с помощью Synchronize все ясно, а если я из потока обращаюсь к не визуальному...

Пример работы с потоками, нужно разобрать!
День добрый, помогите разобрать код программы буду очень благодарен :read: .386P .MODEL FLAT, STDCALL include pr64_1.inc ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru