一个很菜的问题,希望大侠指教!(100分)

K

kyo_z

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在想做一个同时收发程序,想采用多线程,假设有edit1,edit2,一个线程是edit1用来接收信息,
一个是从edit1中读信息到edit2中,
unit Unit2;
interface
uses
Classes,SysUtils,StdCtrls;
type
Tmy_Thread = class(TThread)
private
{ Private declarations }
public
MyEdit:Tedit;
protected
procedure Execute;
override;
end;

implementation
uses unit1;
procedure Tmy_Thread.Execute;
var
i:integer;
begin
for i:=0 to 1000
do
myedit.Text:=inttostr(i);
{ Place thread code here }
end;
end.

然后将myedit 的值给edit1,
现在的问题是我如何在edit1在接到数据的同时,edit2再将edit1中的值读过来,这个线程如何实现
最好有源码,无尽感激。
 
你的MyEdit好象没有create呀?
要实现在edit1在接到数据的同时,edit2再将edit1中的值读过来,可以在Edit1的OnChange事件里
调用MyThread.create,具体代码如下:
线程单元:
unit Unit2;
interface
uses
Classes, Unit1;
type
Test = class(TThread)
private
{ Private declarations }
protected
procedure Execute;
override;
procedure SetEditText;
end;

implementation
{ Test }
procedure Test.Execute;
begin
{ Place thread code here }
Synchronize(SetEditText);
end;

procedure Test.SetEditText;
begin
Form1.Edit2.Text := Form1.Edit1.Text;
end;

end.

主程序:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
procedure Edit1Change(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
uses Unit2;
var
MyThread: Test;
{$R *.dfm}
procedure TForm1.Edit1Change(Sender: TObject);
begin
//MyThread.Resume;
MyThread := Test.Create(false);
//MyThread.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
//MyThread := Test.Create(true);
end;

end.
 
首先谢谢薄荷,如果循环次数少,不会出现问题,但循环次数超过三千次,就会出现
存储空间不足,无法处理此命令的错误
是不是同时操作edit1时出现冲突;能帮我解决吗?
 
你应该考虑两个线程之间的同步问题
 
我的建议是在开始接收数据时创建线程,例如,在Edit1的OnChange中写入
if not Assigned(Thread1) then
Thread1 := TThread.Create;
在接收完后释放线程:Thread1.Terminate;
Thread1.Free;
Thread1 := nil;
 
很好很好!
--------------------------------------------
              ,%%%%%%%,
             ,%%//%%%%//%,
            ,%%%/c "" J/%%,
  %.          %%%%/ d b /%%%
  `%%.     __   %%%%  _ |%%%
  `%%   .-' `"~--"`%%%%(=_Y_=)%%' ~~~
   //  .'   `.   `%%%%`/7/%%%'____
  ((  /     ;   `%%%%%%%'____)))
  `.`--'     ,'  _,`-._____`-,
热爱生活 不爱美女 关注大众 无视权贵 一奋青
 
TO 薄荷
你的线程每次都没释放,所以运行3000次就当机
我建议在
procedure TForm1.Edit1Change(Sender: TObject);
begin
MyThread := Test.Create(false);
.
'
.
MyThread .Terminate;
MyThread .Free;
MyThread := nil;
end;

 
THANK YOU!
 
顶部