![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Xieon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 29.8.2009 Репутация: нет Всего: нет |
Всем привет)
В рамках своего проекта пишу встроенный чекер прокси, естественно, многопоточный. Есть кнопки Запуск и Отмена. Какой-то косяк возник при написании кода для "Отмены", а именно: при нажатии на кнопку я делаю всем потокам дисконнект IdHTTP и затем Terminate, соответственно в каждом потоке проверка - если Terminated то Exit. Отлаживаю прогу с окошком Threads - если я создаю где то 10-15 потоков - они прекрасно таким способом все завершаются. Но если увеличить их количество, скажем до 50-100 - такая схема перестает работать, свойство Terminated нифига не становится True и потоки висят( Надеюсь, я понятно объяснил, в чем проблема) Что можно сделать с этим? P.S. Специально создал тему здесь, а не в "Сетях", т.к вопрос именно по потокам, а не по Indy P.S.2 Экспериментально найдено число потоков, после которого они не завершаются - 16. Это сообщение отредактировал(а) Xieon - 29.8.2009, 12:18 |
|||
|
||||
| RomanEEP |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 5 Всего: 8 |
Непонятно. Ты хочешь сказать что в объект TYourThread поле FTerminated не выставляется в True? Это как? По идеи если команда move не может записать значение в память, то процессор непременно возбудит исключение, которое в Delphi приходит как EAccessViolation. У меня подозрение, что либо в твоем коде, либо в Indy в коде из-за синхронизации возникает Deadlock. Ради эксперимента можно попробовать всем потокам поставить минимальный приоритет
А почему дисконнект не делаешь внутри потока? Это сообщение отредактировал(а) RomanEEP - 29.8.2009, 13:26 |
|||
|
||||
| Xieon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 29.8.2009 Репутация: нет Всего: нет |
Всё, вроде бы разобрался....проблема была в логике работы управляющего потока. Наверное, тему можно закрыть.
Внутри потока вызывается IdHTTP.Get, на котором он может очень долго висеть и не завершаться. Приходится выпиливать Get с исключением, делая дисконнект извне. Это сообщение отредактировал(а) Xieon - 29.8.2009, 17:16 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |