怎样在窗体中建立一个线程,让这个线程的Execute中的代码也能使用窗体的Privite定义的变量? ( 积分: 100 )

  • 主题发起人 主题发起人 labixiaoxin
  • 开始时间 开始时间
L

labixiaoxin

Unregistered / Unconfirmed
GUEST, unregistred user!
这样的做法--不好
并且Privite定义的变量有效于自己本身。
若需要的话,可以通过参数传递过去
 
窗体和线程
定义在一个单元里面就可以了
 
我在程序中要用到很多窗体上的变量,以前用全局变量,但发现数量多,而且改成全局变量后有点乱,所以想把线程做成“属于窗体”的,不知青能不能这样做?
 
我的线程定义
Treaddatathread = class(TThread)
protected
procedure Execute;
override;
end;

在窗体的private 中定义
mythread : Treaddatathread;
但以下代码无法定义
procedure Tform1.mythread.Execute;
怎样解决?
 
你可以把线程封装到一个类里去,定义一些自己需要的参数,还有一个初始化函数
当创建线程的时候,通过初始化函数把主窗体参数也一起传过去
 
Treaddatathread = class(TThread)
public
procedure Execute;
override;
end;
{ Treaddatathread }
procedure Treaddatathread.Execute;
begin
inherited;
end;
你的定义是不对的
 
创建线程是mythread : Treaddatathread;
mythread:=Treaddatathread(false或者true);
 
sbzldlb的方法只能是在窗体的PUBLIC中定义的变量才能用,有没有在窗体的PRIVATE中定义的变量,线程的Execute也能用的方法呢?
 
现在够明白了
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
Treaddatathread = class(TThread)
private
b:integer;
protected
constructor Create();
procedure Execute;
override;
function gettest(text:integer):bool;
end;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
a:integer;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
implementation
{$R *.dfm}
{ Treaddatathread }
constructor Treaddatathread.Create;
begin
inherited create(true);
end;

procedure Treaddatathread.Execute;
begin
inherited;
end;

function Treaddatathread.gettest(text: integer): bool;
begin
b:=text;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
mythread : Treaddatathread;
begin
a:=1;
mythread:=Treaddatathread.Create;
mythread.gettest(a);
mythread.Resume;
end;

end.
 
为了你的分数,只好努力了,[^][:D]
 
在同一个单元定义线程对象即可.
//来自:labixiaoxin, 时间:2005-8-27 10:15:03, ID:3182276
//我在程序中要用到很多窗体上的变量
这恐怕是你设计的问题,线程的任务是很明确的,他应该就是完成一项针对性很强的工作,除了基本的线程控制和一些可以用消息实现的信息传递,不应该让它和外边有太多的交互,不然如果程序比较复杂,那么你就麻烦了.
 
sbzldlb:
你的代码运行后出错,其实我只想实现:
procedure Treaddatathread.Execute;
begin
inherited;
a := 1;
button1.caption := inttostr(a);
end;
 
zjan521说的对,我要改程序结构了。多谢各位。
 
后退
顶部