Показать сообщение отдельно
  #1  
Старый 07.01.2010, 12:21
Аватар для amaroktmb
amaroktmb amaroktmb вне форума
Прохожий
 
Регистрация: 03.01.2010
Сообщения: 3
Репутация: 10
По умолчанию thread вешает приложение

Заранее извиняюсь, но этот вопрос упоминался в другой моей теме в разделе сетей. Просто там этот вопрос не в тему поэтому решил повтрить его тут.

у меня проблема такого рода: при создании потока он вешает приложение. загрузка цп 100%. в чем может быть проблема. читал много инфы по потокам но ничего не нашел.
вот пример кода

Код:
unit Unit3;

interface

uses
  Classes, sysutils;

type
  mythread = class(TThread)
    name:string;
    i:longint;
    procedure showmsg1;//(i:longint);
    procedure showmsg2;//(i:longint);
  private
    { Private declarations }
  protected
    procedure Execute; override;
  end;

implementation

uses unit1;
{ Important: Methods and properties of objects in visual components can only be
  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure mythread.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }

{ mythread }

procedure mythread.showmsg1;//(i:longint);
begin
form1.Memo1.Lines.Append(inttostr(i));
end;

procedure mythread.showmsg2;//(i:longint);
begin
form1.Memo2.Lines.Append(inttostr(i));
end;

procedure mythread.Execute;
  { Place thread code here }
begin
while not terminated do begin
  inc (i);
  if name='1' then Synchronize(showmsg1);
  if name='2' then Synchronize(showmsg2);
  if i>10000 then terminate;
    end;
end;

end.

а также часть кода из модуля Unit1

Код:


t1:=mythread.Create(false);
t1.name:='1';
t2:=mythread.Create(false);
t2.name:='2';
//Application.ProcessMessages;
Admin: Пользуемся тегами!
Ответить с цитированием