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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2012, 17:09   #1
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
Счастье Проблема с потоком!

Всем привет!!!
Создаю программу, которая будет работать с сетью с помощью idTCP. Вроде-бы всё работает, но форма подтормаживает. Решил сделать в потоке. На таймере с интервалом 50мс. создаётся поток, затем в потоке idTCPClient принимает и отправляет информацию, но при соединении клиента с сервером, на клиенте происходит ошибка, форма становится белой и windows выводит сообщение о прекращении работы приложения. Когда было без потока всё работало. Вот код:
Код:
...
 TCon=class(TThread)
  private
  public
  procedure Execute; override;
end;

var
Con:TCon;
...
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//Вызываем поток
 Con:=TCon.Create(false);
 Con.Priority:=tpHigher;
 con.FreeOnTerminate:=true;
end;
...
{ TCon }
procedure TCon.Execute;
var
stream:TMemoryStream;
f:string;
begin
inherited;
try
form1.idTCPClient1.WriteLN('width2'+IntToStr(form1.image2.Width));
form1.idTCPClient1.WriteLn('height2'+IntToStr(form1.image2.Height));
form1.idTCPClient1.WriteLn('get_screen_width');
   width1:=form1.idTCPClient1.ReadInteger;
  form1.idTCPClient1.WriteLn('get_screen_height');
   height1:=form1.idTCPClient1.ReadInteger;
   form1.ScrollBar1.Max:=width1-form1.image2.Width;
   form1.ScrollBar2.Max:=height1-form1.image2.Height;
form1.sScrollBar1.Max:=form1.ScrollBar1.Max;
form1.sScrollBar2.Max:=form1.ScrollBar2.Max;

  form1.idTCPClient1.WriteLn('get_screen:'+IntToStr(form1.ScrollBar1.Position*-1)+','+IntToStr(form1.ScrollBar2.Position*-1));

  stream:=TMemoryStream.Create;
  form1.idTCPClient1.ReadStream(stream);
  stream.Position:=0;
  form1.Image2.Picture.Bitmap.LoadFromStream(stream);
  stream.Clear;
  stream.Free;
except
end;
end;
Всем заранее СПАСИБО!!!
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 12.04.2012, 21:07   #2
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Я сейчас поставил на таймере интервал 1000мс. и всё заработало. У меня походу поток не успел ещё завершиться, а заново создается. Как определить что поток завершён?
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Старый 12.04.2012, 21:21   #3
vovken1997
Дружелюбный
Форумчанин
 
Аватар для vovken1997
 
Регистрация: 23.02.2012
Сообщений: 692
По умолчанию

Сам проблему решил за счет boolean переменной.
-==ЛЮБОЕ ЗНАНИЕ ДОСТИГАЕТСЯ ТОЛЬКО СОБСТВЕННЫМИ УСИЛИЯМИ!!!==-
vovken1997 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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