Показать сообщение отдельно
  #2  
Старый 04.01.2010, 13:33
Аватар для march
march march вне форума
Начинающий
 
Регистрация: 04.05.2009
Сообщения: 110
Репутация: 18
По умолчанию

Вроде как ответ нашел на первую часть вопроса и частично на второй:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

procedure incedit1;stdcall;
procedure incedit2;stdcall;


type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

var
 th1,th2:cardinal;
 h1,h2:integer;


procedure incedit1;
var
 i:integer;
begin
  
 i:=0;
 while true do
  begin
    form1.edit1.text:=inttostr(i);
    i:=i+1;
  end;

end;





procedure incedit2;
var
 i:integer;
begin
  i:=0;
 while true do
  begin
    {text2}form1.Edit2.text:=inttostr(i);
    i:=i+1;
  end;
end; 

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 h1:=beginthread(nil,1024,@incedit1,nil,0,th1);
 h2:=beginthread(nil,1024,@incedit2,nil,0,th2);
end;



procedure TForm1.Button2Click(Sender: TObject);
begin
  suspendthread(h1); 
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 suspendthread(h2); 
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 resumethread(h1);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
 resumethread(h2);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
 terminatethread(h1,0); 
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
 terminatethread(h2,0);
end;

end.
Но это все применимо, если только создавать объекты VCL не программно: через форму добавления объектов.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

procedure incedit1;stdcall;
procedure incedit2;stdcall;


type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

var
 th1,th2:cardinal;
 h1,h2:integer;

procedure incedit1;
var
 i:integer;
 text1:tedit;
begin
  text1:=tedit.Create(form1);
   text1.parent:=form1;
   text1.name:= 'edit1';
   text1.left:= 224;
   text1.top:= 16;
   text1.Height:=20;
   text1.Width:= 65; 

 i:=0;
 while true do
  begin
    text1.text:=inttostr(i);
    i:=i+1;
  end;

end;





procedure incedit2;
var
 i:integer;
 text2:tedit;
begin
 text2:=tedit.Create(form1);
  text2.parent:=form1;
  text2.name:= 'edit2';
  text2.left:= 224;
  text2.top:= 40;
  text2.Height:=20;
  text2.Width:= 65;
 i:=0;
 while true do
  begin
    text2.text:=inttostr(i);
    i:=i+1;
  end;
end; 

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 h1:=beginthread(nil,1024,@incedit1,nil,0,th1);
 h2:=beginthread(nil,1024,@incedit2,nil,0,th2);
end;



procedure TForm1.Button2Click(Sender: TObject);
begin
  suspendthread(h1); 
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 suspendthread(h2); 
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 resumethread(h1);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
 resumethread(h2);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
 terminatethread(h1,0); 
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
 terminatethread(h2,0);
end;

end.
В этом примере объекты создаются, но уже не принемают значения i:integer и исчезают после завершения потока. Synchronize применить не получилось (по крайней мере, я не смог). В общем прошу помощи:
1. Как сделать чтобы edit'ы в данном примере не пропадали после завершения процесса и они были восприимчивы к передаваемым им данным из потока.
2. Чтобы программа не рушилась из-за передаваемых ей одновременно данных из разных потоков.
Ответить с цитированием