Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2012, 23:05   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да. Принудительное.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.07.2012, 03:20   #12
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Принудительное.
Ты врёшь. Это установка флага.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.07.2012, 07:50   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Ты врёшь.
А что же ты молчишь, любитель правды? Скажи же мудрость иннародную автору.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.07.2012, 10:21   #14
IIIArtemIII
Новичок
Джуниор
 
Регистрация: 15.07.2012
Сообщений: 8
По умолчанию

значит пытаюсь делать так

Код:
procedure TMyThread.Execute;
begin
(memo)BD.Lines.Text:=(idhttp)HP.Get('Ссылка');
end;
все работает вот ток опять недопустимый дескриптор убираю ишибки нет вызываю через synchronize ошибки нет но все виснет как быть
IIIArtemIII вне форума Ответить с цитированием
Старый 16.07.2012, 10:26   #15
Aristarh Dark
Форумчанин
 
Регистрация: 07.08.2007
Сообщений: 154
По умолчанию

Цитата:
Сообщение от IIIArtemIII Посмотреть сообщение
все работает вот ток опять недопустимый дескриптор убираю ишибки нет вызываю через synchronize ошибки нет но все виснет как быть
Знаки препинания расскавить, чтоб понятно было о чем речь.
Aristarh Dark вне форума Ответить с цитированием
Старый 16.07.2012, 10:30   #16
elagin
Пользователь
 
Аватар для elagin
 
Регистрация: 26.05.2007
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Aristarh Dark Посмотреть сообщение
Знаки препинания расскавить, чтоб понятно было о чем речь.
т=к
да вроде и так понятно, что он написал =)
elagin вне форума Ответить с цитированием
Старый 16.07.2012, 11:28   #17
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от IIIArtemIII Посмотреть сообщение
вызываю через synchronize ошибки нет но все виснет как быть
synchronize выполняется в контексте главного потока, то есть дочерний поток приостанавливается и передаёт управление главному потоку. Естественно, главный поток будет приостановлен пока не скачает то, что находится по ссылке. Если там фильм на 2 ГБ, то зависнет программа оч. как на долго. Ну а если страничка, то на несколько секунд.
Создавай динамический idhttp в потоке, там же скачивай в переменную какую-нить, а затем вызывай синхронизацию в которой будет только заполнение memo из переменной. По окончанию потока не забудь почистить память.
eoln вне форума Ответить с цитированием
Старый 16.07.2012, 12:22   #18
IIIArtemIII
Новичок
Джуниор
 
Регистрация: 15.07.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Aristarh Dark Посмотреть сообщение
Знаки препинания расскавить, чтоб понятно было о чем речь.
Россия страна не одна есть и другие где люди говорят и учат не русский

Цитата:
Сообщение от eoln Посмотреть сообщение
synchronize выполняется в контексте главного потока, то есть дочерний поток приостанавливается и передаёт управление главному потоку. Естественно, главный поток будет приостановлен пока не скачает то, что находится по ссылке. Если там фильм на 2 ГБ, то зависнет программа оч. как на долго. Ну а если страничка, то на несколько секунд.
Создавай динамический idhttp в потоке, там же скачивай в переменную какую-нить, а затем вызывай синхронизацию в которой будет только заполнение memo из переменной. По окончанию потока не забудь почистить память.
вот это очень интересно как создать динамический компонент (может кто знает интересный мануал статью) мне нужно динамически создать 3 компонента listview memo idhttp

Все получилось нет больше недопустимый дескриптор вот ток теперь мерцает memo то есть которое я создаю динамически 5 раз создаю вот оно и 5 раз мерцает
создаю так

Код:
MMemo:=TMemo.Create(Form1);
MMemo.Parent:=Form1;
MMemo.Visible:=false;
MMemo.ScrollBars:=ssBoth;
MMemo.Left:=0;
MMemo.Top:=0;
MMemo.Width:=100;
MMemo.Height:=100;

Последний раз редактировалось Stilet; 16.07.2012 в 17:54.
IIIArtemIII вне форума Ответить с цитированием
Старый 16.07.2012, 14:03   #19
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

5 мемов - это не 100. Можно вручную накидать (хотя случаи бывают разные). Простенький пример (на форме 5 memo и 1 button)
Код:
  TMyThread = class(TThread)
  private
    { Private declarations }
    ss, url: string;
    idhttp: Tidhttp;
    memo: TMemo;//будет указывать в какой memo на форме выводить
  protected
    constructor Create(url_name: string; memo_name: TMemo); overload;
    procedure Execute; override;
    procedure write;
  end;

var
  Form1: TForm1;
  th: array[1..5] of TMyThread; //массив потоков
  path: array[1..5] of string = ( //массив адресов
    'http://mail.ru',
    'http://yandex.ru',
    'http://rambler.ru',
    'http://programmersforum.ru',
    'http://wikipedia.org');

implementation

{$R *.dfm}

constructor TMyThread.Create(url_name: string; memo_name: TMemo);
begin
  inherited Create(false);
  url := url_name;
  memo := memo_name;
  idhttp := Tidhttp.Create;
  idhttp.HandleRedirects := true;
  idhttp.RedirectMaximum := 10;
end;

procedure TMyThread.Execute;
begin
  ss := 'start loading from ' + url;
  synchronize(write);
  ss := idhttp.Get(url);
  synchronize(write)
end;

procedure TMyThread.write;
begin
  memo.text := ss; //эта строка будет синхронизироваться с главным потоком
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  th[1] := TMyThread.Create(path[1], Memo1);
  th[2] := TMyThread.Create(path[2], Memo2);
  th[3] := TMyThread.Create(path[3], Memo3);
  th[4] := TMyThread.Create(path[4], Memo4);
  th[5] := TMyThread.Create(path[5], Memo5);
  //эти 5 строчек можно завернуть через form1.components
  //но кода от этого почти не убавится, а наглядность пострадает ))
end;
Ну и деструктор ещё дописать осталось.
eoln вне форума Ответить с цитированием
Старый 16.07.2012, 16:39   #20
IIIArtemIII
Новичок
Джуниор
 
Регистрация: 15.07.2012
Сообщений: 8
По умолчанию

eoln спасибо тебе большое без помощи я бы долго выносил себе мозг все получилось
IIIArtemIII вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Глюк VCL НЕ_АЙС Компоненты Delphi 4 03.08.2014 04:43
Класс запускает поток, который заполняет этот класс. Обмен класс <=> поток. Человек_Борща Общие вопросы Delphi 8 27.02.2012 23:24
Поток. Не получается создать поток. Выдает ошибки при запуске bigory Общие вопросы по Java, Java SE, Kotlin 3 23.09.2010 00:40
Перлы VCL Квэнди Свободное общение 7 13.02.2009 09:08
VCL Э/\bФ_}{P Свободное общение 2 21.05.2007 00:21