|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.09.2018, 18:03 | #1 |
Форумчанин
Регистрация: 06.10.2013
Сообщений: 216
|
Потоки
Привет, можно ли запустить 20 потоков с помощью цикла?
Код:
|
10.09.2018, 18:15 | #2 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
да. но как их потом ждать, убивать? если не надо ждать и они самоубиваются - норм
Не стесняемся, плюсуем!
|
10.09.2018, 18:19 | #3 |
Форумчанин
Регистрация: 06.10.2013
Сообщений: 216
|
|
10.09.2018, 19:09 | #4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
|
10.09.2018, 19:20 | #5 | |
Форумчанин
Регистрация: 06.10.2013
Сообщений: 216
|
Цитата:
уже пробую через BeginThread, но параметры приходят битые почему то.. а в нормальный паток параметры передать не удалось, но с ним проще, он сам умрет по завершению, так что если прогу закроют, они либо умрут либо выполнятся и умрут это я все пытаюсь ускорить сканер портов путем потоков, по одному долго очень с параметрами разобрался и потоки создаются, но в случае ошибки except не срабатывает и поток висит вот его процедура Код:
listipF.Add(listip[i]); тут нет цикла и неоткуда брать i, вот так надо listipF.Add(Parameter.ip); Последний раз редактировалось PTyTb32; 10.09.2018 в 22:45. |
|
11.09.2018, 06:47 | #6 |
Участник клуба
Регистрация: 07.12.2011
Сообщений: 1,025
|
Лучше сделать пул потоков. массив потоков.
поток сам берет параметр из списка, обрабатывает и убивается столько при отсутствии параметров в списке, не забывая вычистить себя из пула. и среда какая? Delphi хорошо так шагнул вперед с потоками и параллельной обработкой...
Не стесняемся, плюсуем!
|
11.09.2018, 12:06 | #7 |
Форумчанин
Регистрация: 06.10.2013
Сообщений: 216
|
XE 10.2 их запускает цикл передавая каждому ip, сейчас борюсь с лютыми утечками, вылетает out of memory если диапазоны огромные. потоки живут не дольше полусекунды если доживет до пол секунды, то except вызванный connectionTimeout приведет к завершению потока, а если подключится то раньше убьется.
|
11.09.2018, 13:31 | #8 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Потоки кушают много памяти. Ограничьте число потоков.
компоненты VCL не потокобезопасны поэтому вот этот участок следует выполнять через Synchronize в главном потоке. Код:
Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
11.09.2018, 13:49 | #9 |
Форумчанин
Регистрация: 06.10.2013
Сообщений: 216
|
без этих потоков он проверяет адреса последовательно, а это очень долго.
Synchronize используется в других потоках, я использую BeginThread и выглядит это вот так Код:
Код:
|
11.09.2018, 13:58 | #10 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Фигня какая-то, а не функция.
Уберите оттуда всю работу с формой, сделайте чистую функцию, которая просто принимает адрес и возвращает результат. При завершении потока передавайте куда-нибудь результат, например с помощью событий/callback'ов, синхронизируйтесь с основным потоком. В TThread вроде есть готовый OnTerminate для этого.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Потоки. Закрываются все потоки при ошибке в одном. | Son | Общие вопросы Delphi | 11 | 01.11.2013 09:32 |
потоки | Cpluser | C# (си шарп) | 1 | 28.10.2012 17:00 |
Потоки | _Mixer_ | Общие вопросы по Java, Java SE, Kotlin | 4 | 16.10.2011 19:25 |
Потоки С++ | Aleksin | Помощь студентам | 1 | 07.11.2010 18:15 |
потоки | tanek | Помощь студентам | 6 | 15.03.2010 21:42 |