lala4a
-
Постов
9 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные lala4a
-
-
-
9 часов назад, ZuBy сказал:
использовать так, НЕ В ПОТОКЕ
LoadResizeBitmapFromURL('image-url', Image1.Bitmap, 120, 120);
Вылетает приложение с ошибкой
Цитатаsegmentation fault 11
Первый раз такую ошибку вижу
-
procedure ThreadHTTP.Execute; var j:integer; idhttp : TIdHTTP; ms:tmemorystream; png:tbitmap; begin ms := TMemoryStream.Create; IdHTTP := TIdHTTP.Create(nil); url:=TIdURI.URLEncode(url); try idhttp.Get(url,ms); ms.Position := 0; finally TThread.Synchronize(nil, procedure begin bmp.LoadFromStream(ms); end); idhttp.Free; ms.Free; end; end;
Хм . Вот так работает на Android .
-
1 час назад, Brovin Yaroslav сказал:
После окончания метода
getpic
ARC удаляет ваш поток, так как ссылок на него нету. Нужно вынести переменную потока в поле класса, чтобы гарантировать наличие одной ссылки на ваш поток.
Подскажите пожалуйста примером .
43 минуты назад, GASCHE сказал:И работать будет коряво TImage не поток безопасный компонент поэтому присваивать ему значение в потоке без синхронизации нельзя.
А если Tbitmap ?
Я читал про потоки , но так и не понял как синхронизировать графический компонент . Попробую описать , для чего конкретно мне надо , может направите в другое русло .
С сервера получаем список вещей . К каждой вещи есть картинка . Для отображения списка используется компонент
Цитатаtkstableview
В процессе заполнения списка загружаются картинки .
ЦитатаAItem: tkstableviewitem;
pic:string;
getpic(pic,AItem.Image.bitmap);
В главном потоке это очень долго и подвисает основная форма .
Цитатаapplication.HandleMessage;
Не спасает .
Поэтому хочу сначала получить список , а потом плавненько загрузить изображения .
Пробовал через глобальные переменные - изображения вроде как загружаются, но получается бардак - они то повторяются , то перемешиваются , а то вообще их нет .
Вот накатал пример с использованием Timage , так сказать для пробы и дальнейшего переноса в основную программу , но с потоками дел до этого не имел . В интернете уйма примеров по скачке и сохранению файлов , по расчетам и прочему . По своей задаче не нашел . Надеюсь вы мне поможите )
-
Доброе время суток .
Я только начал знакомится с потоками , не судите строго .
Вот код . Смысл которого через отдельный поток загружать изображение с сервера .
unit Unit5; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,iduri,idhttp, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects, FMX.Controls.Presentation, FMX.StdCtrls; type ThreadHTTP=class(TThread) private Stream:TMemoryStream; bmp:tbitmap; url:string; public constructor Create(abmp:tbitmap; aurl: String); procedure Execute;override; // procedure ShowResult; end; type TForm5 = class(TForm) Button1: TButton; Image1: TImage; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure getpic(pic: string; img: Tbitmap); end; var Form5: TForm5; implementation {$R *.fmx} constructor ThreadHTTP.Create(abmp:tbitmap;aurl:string); begin inherited Create(false); bmp := abmp; url:=aurl; end; procedure ThreadHTTP.Execute; var j:integer; idhttp : TIdHTTP; ms:tmemorystream; png:tbitmap; begin ms := TMemoryStream.Create; IdHTTP := TIdHTTP.Create(nil); url:=TIdURI.URLEncode(url); try idhttp.Get(url,ms); ms.Position := 0; finally bmp.LoadFromStream(ms); idhttp.Free; ms.Free; end; end; procedure TForm5.Button1Click(Sender: TObject); begin getpic('krovat1',form5.Image1.Bitmap); end; procedure TForm5.getpic(pic: string; img: Tbitmap); var zapros:string; idhttp:tidhttp; MyHTTP:ThreadHTTP; begin zapros:='http://127.0.0.1/getimage_'+pic; MyHTTP:=ThreadHTTP.Create(img,zapros); MyHTTP.FreeOnTerminate := true; MyHTTP.resume; end; end.
Код корявый , но работает в win32 . В Android ничего не происходит .
Помогите разобраться , пожалуйста .
-
Спасибо Вам большое
-
Tedit вставка из буфера обмена и скорость ввода
в TEdit
Опубликовано
ничего не изменилось