Вверх ↑
Ответов: 4621
Рейтинг: 746
#1: 2021-02-11 16:39:09 ЛС | профиль | цитата
MBO писал(а):
Если старый не дошел на него уже лучше забить
Для того чтобы "забить", надо дождаться результата - "дошел" или нет. Ты же, не дожидаясь результата убиваешь исполнение. Успел запрос к этому моменту отработать - ему повезло, а нет - так это его проблемы. Это - критическая проблема логики, с которой ты и начал эту тему: ты неконтролированно множишь использование ресурсов (например, открытые сетевые соединения), не дожидаясь освобождения предыдущих. А при реализации этой логики путем убивания потока исполнения - освобождение и не светит.

MBO писал(а):
а работал как старый HTTP_Get в отдельном потоке
Это абсолютно идентично обеспечивается компонентом Thread+HTTPClient. Нужна точка "Busy"? Она есть у компонента Thread и будет выполнять ровно ту же функцию. При этом помня что "никогда не используй метод Thread.doStop, а также свойство Thread.BusyEvent=Restart"

MBO писал(а):
Может это я что-то не так делаю
Перестань подавать данные для следующих запросов "извне" параллельного потока Thread. Из того места, в котором понадобилась точка "Busy". Не нужно знать закончил ли поток выполнять все запросы: ты изначально ему должен задать условия, когда он должен закончить работу. И быть уверенным что он закончится именно при наступлении тех условий. Например, по окончанию перебора списка запросов.

1) Подготовь все необходимые данные для запросов. Запусти Thread (Thread.FastStop=False). По Thread.onExec взял следующие по списку данные, подал на HTTPClient, выполнил запрос. Пока запрос будет выполняться, Thread.onExec не начнет выбирать следующие данные и выполнять следующий запрос.

2) Подготовь данные. Запусти Thread (Thread.FastStop=True). По Thread.onExec поставь ArrayEnum, перебирающий список запросов. На выходе ArrayEnum стоит HTTPClient, выполняющий запросы.

Ничего не надо прерывать - каждый новый запрос выполняется только после завершения предыдущего. Хочешь чтобы меньше времени тратилось на ожидание неотвечающего сервера - уменьши таймауты HTTPClient. Хочешь интервал между запросами? Измени Thread.Delay (при Thread.FastStop=False). Хочешь остановить работу? Thread.doStopFlag + HTTPClient.doAbort + ArrayEnum.doStop. Хочешь узнать когда все запросы будут выполнены? Событие ArrayEnum.onEndEnum или вторая точка хаба на выходе с Thread.onExec (первая точка - на выполнение запросов).
карма: 26

0
Редактировалось 3 раз(а), последний 2021-02-11 16:48:33