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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2012, 13:40   #1
ZekaUa
Пользователь
 
Регистрация: 26.02.2011
Сообщений: 11
Восклицание Проблема с потоком

Есть поток, созданный таким способом:
Код:
type
  TNewThread = class(TThread)
  private
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean);
  end;

implementation

constructor TNewThread.Create(CreateSuspended: Boolean);
begin
  inherited Create(CreateSuspended);
end;

procedure TNewThread.Execute;
var ViewObject: IViewObject;
  SRect: TRect;
  screenshot2:TBitmap;
begin
   if Form1.wb1.Document <> nil then
   try
      Form1.wb1.Document.QueryInterface( IViewObject, ViewObject );
      if ViewObject <> nil then
      try
         //screenshot2.Free;
         screenshot2 := TBitmap.Create;
         screenshot2.Width := Form1.wb1.Width;
         screenshot2.Height := Form1.wb1.Height;
         screenshot2.PixelFormat:=pf24bit;
         SRect := Rect( 0, 0, screenshot2.Width, screenshot2.Height );
         ViewObject.Draw( DVASPECT_CONTENT, 1, nil, nil, Form1.wb1.Handle,
                          screenshot2.Canvas.Handle, @SRect, nil, nil, 0 );
         Form1.img1.Width:=Form1.wb1.Width;
         Form1.img1.Height:=Form1.wb1.Height;
         Form1.img1.Canvas.Draw(0,0,screenshot);
         screenshot2.Free;
      finally
         ViewObject._Release;
      end;
   except
   end;
end;
В потоке делается скриншот wb1:TWebBrowser и рисуется в image:TImage. Но проблема в том, что он не рисуется, а просто блокирует image или рисует там белый фон, а если тоже самое делать без потока, то все ок!
Подскажите где ошибка. Заранее спасибо!

P.S.: Поток с другими функциями работает нормально. Если это закинуть в процедуру и вызвать из потока - такая же хрень, а если вызвать из события нажатия кнопки то все работает(

Последний раз редактировалось Stilet; 01.02.2012 в 15:47.
ZekaUa вне форума Ответить с цитированием
Старый 01.02.2012, 13:42   #2
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

У вас в потоке нет прерывания, синхронизации, грубо говоря паузы, попробуйте вписать в функцию TNewThread.Execute значение sleep(10). Он еще к томуже грузит процессор без этих прерываний. И еще может быть ошибка типа Draw
потому как в потоке нельзя выполнять визуальные действия и прямое обращение, нужно работать по созданым событиям доп. функциям в потоке и вызывать примерно так Synchronize(OnMyDraw), а потом выполнять нужные действия

Последний раз редактировалось Aliens_wolfs; 01.02.2012 в 13:59.
Aliens_wolfs вне форума Ответить с цитированием
Старый 01.02.2012, 14:59   #3
ZekaUa
Пользователь
 
Регистрация: 26.02.2011
Сообщений: 11
По умолчанию

Sleep не помогает( Добавил вспомогательную процедуру MyDraw и поместил туда тело потока и вызвал ее в потоке - тоже ничего((

Последний раз редактировалось ZekaUa; 01.02.2012 в 15:04.
ZekaUa вне форума Ответить с цитированием
Старый 01.02.2012, 15:13   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Потому что к VCL компонентам нельзя обращаться напрямую из потока. При создании потока даже подсказка есть что надо использовать синхронизацию с основным потоком методом Syncronise
FaTaL вне форума Ответить с цитированием
Старый 01.02.2012, 15:29   #5
ZekaUa
Пользователь
 
Регистрация: 26.02.2011
Сообщений: 11
По умолчанию

Все, все разобрался! С Syncronise все заработало!! УРА!!! УРА!!! УРА!!! Спасибо огромное!
ZekaUa вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с потоком timur oO Помощь студентам 2 14.04.2010 17:02
Delphi Проблема с потоком TreadProblem Помощь студентам 1 07.03.2010 17:59
Проблема с потоком в Delphi 2009. S_Yevgeniy Общие вопросы Delphi 2 02.01.2010 13:16
Проблема с потоком Araver Общие вопросы Delphi 4 16.10.2007 04:30