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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2015, 09:56   #11
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
а код свой (реальный) ты мне так и не показал.
Реальный код примерно такой же, только он получает гораздо больше данных.

Вот код в миниатюре, но показывает полную картинку происходящего.
Объект браузера передается при запуске потока. TH.WB:=wb1;


Код:
unit ...;

interface

uses ...

type
  Thread = class(TThread)
    a : integer;
	WB : TWebBrowser;
  private
    { Private declarations }
  protected
    procedure Execute; override;
	procedure update;
  end;
  
var
  TH:Thread;
  
implementation

procedure Thread.Execute;
  var i : integer;
begin
  for i := 0 to 10 do begin
    a := i;
	Synchronize(update);
  end;
end;

procedure Thread.update;
begin
  WB.Navigate(site);
end;

procedure TForm1.wb1DocumentComplete(...);
begin
 // Здесь нам нужна переменная "a" из потока.
end;

end.
bilibian вне форума Ответить с цитированием
Старый 07.11.2015, 10:22   #12
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Код:
procedure TForm1.wb1DocumentComplete(...);
begin
 // Здесь нам нужна переменная "a" из потока.
 // Я делаю так:
 memo1.lines.add( inttostr( TH.a ) );

 // Все хорошо, но последний ответ приходит пустой
end;
bilibian вне форума Ответить с цитированием
Старый 07.11.2015, 10:25   #13
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

убери syncronize из цикла и:
Код:
procedure Thread.wb1DocumentComplete(...);
begin
 Syncronize( {передача чего угодно наружу} );
 // Здесь нам нужна переменная "a" из потока.
end;
Да, и вот это прочитай. ОБЯЗАТЕЛЬНО!!!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.11.2015, 11:01   #14
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Отличная сага
bilibian вне форума Ответить с цитированием
Старый 07.11.2015, 11:05   #15
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Вот только, как, все-таки, передать данные наружу то? Они ведь находятся внутри потока.
Дать тебе кусок кода в качестве примера?
Или ты, всё-таки, потратишь 10 минут на чтение правильной книжки?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.11.2015, 15:09   #16
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Сделал весь свой код внутри потока, но проблема осталась.

При последней обработке циклом, невозможно получить переменную "а" в функции "wb1DocumentComplete" так как поток завершается быстрее.

Код:
unit ...;

interface

uses ...;

type
  Thread = class(TThread)
    a : integer;
    WB : TWebBrowser;
  private
    { Private declarations }
  protected
    procedure Execute; override;
	procedure WBDocumentComplete(...);
	procedure update;
  end;
  
var
  TH:Thread;
  
implementation

procedure Thread.Execute;
  var i : integer;
begin
  for i := 0 to 10 do begin
    a := i;
    update;
  end;
end;

procedure Thread.update;
begin
  WB.OnDocumentComplete := WBDocumentComplete;
  WB.Navigate(site);
end;

procedure Thread.WBDocumentComplete(...);
begin
  // Здесь используем нашу переменную "a"
end;

end.
bilibian вне форума Ответить с цитированием
Старый 07.11.2015, 15:22   #17
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
невозможно получить переменную "а" в функции "wb1DocumentComplete" так как поток завершается быстрее
почему я не вижу попыток в коде обработчика? там же только твой комментарий и всё. Чо за фигня тут происходит? почему не хочешь посмотреть мой код, который работает в боевой программе?
а ещё лучше – почитай кусок факингмануала про потоки, чтобы врубиться, как это всё ваще работает.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.11.2015, 15:28   #18
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
почему я не вижу попыток в коде обработчика? там же только твой комментарий и всё. Чо за фигня тут происходит? почему не хочешь посмотреть мой код, который работает в боевой программе?
а ещё лучше – почитай кусок факингмануала про потоки, чтобы врубиться, как это всё ваще работает.
Я пробовал и через Syncronize. Результат абсолютно такой же!

Поток завершается быстрее, чем я вызываю Syncronize в WBDocumentComplete
bilibian вне форума Ответить с цитированием
Старый 07.11.2015, 16:32   #19
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Я пробовал и через Syncronize. Результат абсолютно такой же!

Поток завершается быстрее, чем я вызываю Syncronize в WBDocumentComplete
я чот не пойму: ты мои посты не видишь, что ли? или видишь, но не читаешь?
Это игнор?

Какого хрена тут происходит?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.11.2015, 17:11   #20
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
я чот не пойму: ты мои посты не видишь, что ли? или видишь, но не читаешь?
Это игнор?
Посты повествующие о том, что мне нужно почитать мануал?
bilibian вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование потока IP-данных в проигрываемый видеофайл hr-mdis Фриланс 1 20.11.2014 17:23
получение данных из файла и запись этих данных в другой. Jurii77 Microsoft Office Excel 9 23.11.2011 09:42
Получение дескриптора окна по данным процесса/потока. StIX-S Win Api 8 07.07.2011 05:21
Удаление (Изменение) данных из потока chertovich Общие вопросы Delphi 14 26.12.2010 19:13
Извлечение данных из потока bug Общие вопросы Delphi 11 05.10.2009 14:34