kiz35196 Опубликовано 20 марта, 2018 Опубликовано 20 марта, 2018 как включитьт её если у меня компонент не на форме,а создается через THTTPClient.create; ? Цитата
0 krapotkin Опубликовано 20 марта, 2018 Опубликовано 20 марта, 2018 не надо ничего включать. сделаете только хуже код. выносите в отдельный поток. Brovin Yaroslav 1 Цитата
0 kiz35196 Опубликовано 20 марта, 2018 Автор Опубликовано 20 марта, 2018 23 минуты назад, krapotkin сказал: не надо ничего включать. сделаете только хуже код. выносите в отдельный поток. окей,спасибо Цитата
2 rareMax Опубликовано 21 марта, 2018 Опубликовано 21 марта, 2018 Не обязательно выносить в отдельный тред этот класс. Достаточно воспользоваться асинхронными методами. Ознакомиться с ним возможно в демке от Идеры: Цитата D:\Users\Public\Documents\Embarcadero\Studio\19.0\Samples\Object Pascal\RTL\HttpAsyncDownload Brovin Yaroslav 1 Цитата
0 ENERGY Опубликовано 27 марта, 2018 Опубликовано 27 марта, 2018 (изменено) Лучше использовать потоки, т.к. сейчас все моб. девайсы имеют многоядерные процессоры. TThread.CreateAnonymousThread( procedure begin // код TThread.Queue(nil, procedure begin // здесь код выполнится только по окончании работы потока (отложенный), в главном потоке. // здесь можно работать с формой. end); end ).Start; TThread.CreateAnonymousThread(procedure () begin TThread.Synchronize (TThread.CurrentThread, procedure () begin // код выполнится в главном потоке, - к примеру чтобы показать прогресс на форме. и затем // поток продолжит работу. end); end).Start; Всегда помните что нельзя работать с формой из других потоков, без методов синхронизации. Только в главном, иначе будут случайные AV ошибки. Еще почитайте. http://blog.marcocantu.com/blog/2014_may_background_delphi_android_threads.html Изменено 27 марта, 2018 пользователем ENERGY Rusland и Brovin Yaroslav 2 Цитата
0 Fedor K Опубликовано 27 марта, 2018 Опубликовано 27 марта, 2018 В 20.03.2018 в 11:41, krapotkin сказал: не надо ничего включать. сделаете только хуже код. выносите в отдельный поток. 1 час назад, ENERGY сказал: Лучше использовать потоки, т.к. сейчас все моб. девайсы имеют многоядерные процессоры. TThread.CreateAnonymousThread( ... TThread.CreateAnonymousThread(procedure () begin .... Можете немного подробнее, с чем связано это? Чем стандартная реализация асинхронности не устраивает? Используем около года в довольно сильно нагруженном приложении для асинхронных вызовов API, нареканий не было, Delphi Berlin Update 2. Или сломали реализацию в Tokyo? Цитата
0 Akad Опубликовано 28 марта, 2018 Опубликовано 28 марта, 2018 14 часов назад, ENERGY сказал: TThread.CreateAnonymousThread(procedure () begin TThread.Synchronize Вы реально используете такой код? Небось на 3G соединениях ещё не тестировали... Жуть. 13 часов назад, Fedor K сказал: Используем около года в довольно сильно нагруженном приложении для асинхронных вызовов API, (почти) все обращения к api потоко-независимы. А вот если одновременно из двух потоков сделать memo1.lines.add(..) то будет в лучшем случае бред в результате, в худшем - AV. Цитата
0 Fedor K Опубликовано 28 марта, 2018 Опубликовано 28 марта, 2018 15 минут назад, Akad сказал: (почти) все обращения к api потоко-независимы. А вот если одновременно из двух потоков сделать memo1.lines.add(..) то будет в лучшем случае бред в результате, в худшем - AV. 1. Тут была идея подчеркнуть, что используется именно асинхронность самого THTTPClient, а не постройка своего велосипеда. 2. Можете дать пример кода вашей записи memo1? Или вы имеете ввиду обращение к UI без синхронизации? Цитата
-1 Akad Опубликовано 28 марта, 2018 Опубликовано 28 марта, 2018 1 час назад, Fedor K сказал: 1. Тут была идея подчеркнуть, что используется именно асинхронность самого THTTPClient, а не постройка своего велосипеда. С асинхронностью все печально. Ну то есть использовать можно, но отгрести всевозможных проблем на машинах пользователей тоже... Поэтому лучше отдельный поток и callback. Причём эта практика самая распространённая на всех платформах и api. 1 час назад, Fedor K сказал: 2. Можете дать пример кода вашей записи memo1? Или вы имеете ввиду обращение к UI без синхронизации? Synchronize, а дальше делай что хочешь. В XE 10.x.x будут проблемы в некоторых случаях, но на более ранних всё работало отлично. Цитата
0 krapotkin Опубликовано 28 марта, 2018 Опубликовано 28 марта, 2018 если у нас поток, то вызывается он один раз, следовательно вместо синхронайз лучше просто онтерминейт Цитата
0 ENERGY Опубликовано 28 марта, 2018 Опубликовано 28 марта, 2018 Только что, krapotkin сказал: если у нас поток, то вызывается он один раз, следовательно вместо синхронайз лучше просто онтерминейт Или TThread.Queue Цитата
0 Fedor K Опубликовано 28 марта, 2018 Опубликовано 28 марта, 2018 4 часа назад, Akad сказал: С асинхронностью все печально. Ну то есть использовать можно, но отгрести всевозможных проблем на машинах пользователей тоже... Поэтому лучше отдельный поток и callback. Причём эта практика самая распространённая на всех платформах и api. Synchronize, а дальше делай что хочешь. В XE 10.x.x будут проблемы в некоторых случаях, но на более ранних всё работало отлично. Что конкретно печально в асинхронности клиента? На какой платформе? Если с примером - то вообще замечательно. п.с. Еще раз повторю, что нареканий со стороны работы асинхронности не было замечено в течении года в нагруженном мобильном приложении на обоих осях, Delphi Berlin Update 2. #WAMACO, Maximus и Rusland 3 Цитата
-3 Akad Опубликовано 2 апреля, 2018 Опубликовано 2 апреля, 2018 В 28 марта 2018 г. в 21:21, Fedor K сказал: Что конкретно печально в асинхронности клиента? На какой платформе? Если с примером - то вообще замечательно. TIdHTTP - попробуйте асинхронно что-то сделать. Только в потоке. Все другие indy - тоже самое. Остаются всякие страшные TcpClient1 которые из версии в версию то работаю то не работаю. Причём http - ручками. Ещё то удавольствие. В 28 марта 2018 г. в 21:21, Fedor K сказал: Еще раз повторю, что нареканий со стороны работы асинхронности не было замечено в течении года в нагруженном мобильном приложении на обоих осях, Delphi Berlin Update 2. Сейчас под всеми платформами, что мне известны продвигается синхронный метод+callback. Что диез под виндой, что RxJava/Retrofit под андроид и т.д. Если используете что-то не традиционное - ни каких проблем. Но зачем это советовать другим? Поддерживать стереотип, что программист дельфи - быдлокодер-неформал? Цитата
0 Fedor K Опубликовано 2 апреля, 2018 Опубликовано 2 апреля, 2018 2 часа назад, Akad сказал: TIdHTTP - попробуйте асинхронно что-то сделать. Только в потоке. Все другие indy - тоже самое. Остаются всякие страшные TcpClient1 которые из версии в версию то работаю то не работаю. Причём http - ручками. Ещё то удавольствие. Пожалуйста, внимательней прочтите тему, здесь идет речь про асинхронный THTTPClient, а не про Indy компоненты. Если в вашем приложении до сих пор используется Indy, то советую от него избавляться. 2 часа назад, Akad сказал: Сейчас под всеми платформами, что мне известны продвигается синхронный метод+callback. Что диез под виндой, что RxJava/Retrofit под андроид и т.д. Если используете что-то не традиционное - ни каких проблем. Но зачем это советовать другим? Поддерживать стереотип, что программист дельфи - быдлокодер-неформал? Пожалуйста, будьте более культырными в своем общении, этот форум нацелен повысить уровень делфи программистов, а не унизить кого-то и пустить по плохому пути. THTTPClient успешно делает асинхронные запросы и синхронизирует callback для обработки, поэтому использовать его в синхронном режиме и добавлять свою реализацию асинхронности считаю лишними затаратами ресурсов. Maximus 1 Цитата
0 Akad Опубликовано 2 апреля, 2018 Опубликовано 2 апреля, 2018 (изменено) 1 час назад, Fedor K сказал: Если в вашем приложении до сих пор используется Indy, то советую от него избавляться. Ээээ...Что бы избавиться - должна быть альтернатива. Для сети в дельфи есть только комплект инди компонент. Они нормально работают с шифрованием и парой десятков протоколов. Альтернатив им нет ни стандартных, ни альтернативных. Или я что-то пропустил? THTTPClient/THTTPServer - это даже не смешно. Особенно последний - который половину соединений пропускает при хоть какой-то нагрузке. Клиенту после этих фокусов сервера доверия нет. И смысл только его использовать, даже если он работает болемешно, если есть инди с единой архитектурой и базовыми структурами данных? Где тебе сразу и tcp и udp и smtp и так далее? И всё в едином стиле 1 час назад, Fedor K сказал: Пожалуйста, будьте более культырными в своем общении, этот форум нацелен повысить уровень делфи программистов, Ни кого не хотел обидеть. Я тоже процентов на 40 дельфи программист. Последний мой проект (пока) на дельфи целиком. А это сервер и клиенты под разными ОС. Но достаточно зайти на любой ресурс где "тусят крутые, всезнающие хомячки" типа хабра, и послушать их мнение про Delphi в целом, и программистов, которые пишут на этом языке в частности. При всём идиотизме их заявлений, рациональное зерно там можно проследить. И если весь мир делает в архитектуре приложений определённые паттерны, то наверно не спроста, и незачем делать по другому. Изменено 2 апреля, 2018 пользователем Akad Цитата
0 ENERGY Опубликовано 2 апреля, 2018 Опубликовано 2 апреля, 2018 11 минут назад, Akad сказал: THTTPClient/THTTPServer - это даже не смешно. THTTPClient - стабильно работает на 4 платформах, как https так и http, никогда с ним проблем не было, Писал даже RESTAPI на DropBox и API под корпоративный сервер. А с Indy есть проблемы под Android 6 и выше, - не работает https без шаманства. Про THTTPServer не знаю. Так что не понятно что вас рассмешило Цитата
0 Akad Опубликовано 2 апреля, 2018 Опубликовано 2 апреля, 2018 7 минут назад, ENERGY сказал: А с Indy есть проблемы под Android 6 и выше, - не работает https без шаманства. Можно по подробнее, что за проблемы? В руках 2 телефона на 6 и 1 на 7.1 - ни где у меня с клиентом проблем нет. Цитата
0 Fedor K Опубликовано 2 апреля, 2018 Опубликовано 2 апреля, 2018 @Akad, У Вас есть опыт работы с TNetHTTPClient компонентом или классом THTTPClient? Как и где вы это использовали? Что не понравилось? Какие трудности были? ... можете не отвечать, я уже глянул ваши предыдущие сообщения и смысла в продолжении беседы не вижу @kiz35196 Наиболее простой вариант Вы можете глянуть в этом посте. Maximus 1 Цитата
0 ENERGY Опубликовано 2 апреля, 2018 Опубликовано 2 апреля, 2018 (изменено) 9 минут назад, Akad сказал: Можно по подробнее, что за проблемы? В руках 2 телефона на 6 и 1 на 7.1 - ни где у меня с клиентом проблем нет. Значит вы не используете https. Поищите на форуме по словам Indy https (ssl) Android 6 http://fire-monkey.ru/topic/1922-android-60-не-удается-загрузить-ssl-библиотеку/ http://fire-monkey.ru/forum/368-ssl/ Изменено 2 апреля, 2018 пользователем ENERGY Akad 1 Цитата
0 Евгений Корепов Опубликовано 4 апреля, 2018 Опубликовано 4 апреля, 2018 В 20.03.2018 в 11:07, kiz35196 сказал: как включитьт её если у меня компонент не на форме,а создается через THTTPClient.create; ? Var FIAsyncResult : IAsyncResult; procedure DoEndDownload(const ASyncResult: IAsyncResult); .... FHTTPClient:=THTTPClient.Create; FHTTPClient.ResponseTimeout:=FResponseTimeout; FHTTPClient.ConnectionTimeout:=FConnectionTimeout; FIAsyncResult:=FHTTPClient.BeginGet(DoEndDownload, 'https://.....'); procedure TServiceData.DoEndDownload(const ASyncResult: IAsyncResult); Var LAsyncHTTPResponse : IHTTPResponse; begin try LAsyncHTTPResponse:=THTTPClient.EndAsyncHTTP(AsyncResult); except on E:Exception do AErrorMessage:=E.Message; end; if Assigned(LAsyncHTTPResponse) then begin if LAsyncHTTPResponse.StatusCode = 200 then S:=LAsyncHTTPResponse.ContentAsString; .... Rusland 1 Цитата
0 Ingalime Опубликовано 5 апреля, 2018 Опубликовано 5 апреля, 2018 В 03.04.2018 в 01:25, ENERGY сказал: . Поищите на форуме по словам Indy https (ssl) Android 6 https://forums.embarcadero.com/thread.jspa?messageID=986842&tstart=0#986842 Цитата
Вопрос
kiz35196
как включитьт её если у меня компонент не на форме,а создается через THTTPClient.create; ?
20 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.