传参数,不要全局变量!有人说 property 可以,但不懂怎么搞!难道把 TTread 再封装成组件吗?
解决方案 »
- 【工具分享】【开源项目】《IE脚本辅助》--IE脚本开发不可缺少的工具。
- 请问在DELPHI7中如何实现数据库的备份和恢复。
- 资源共享:delphi文件操作!相关命令,函数...(推荐书籍等!)
- 杭州哪里有买李维的<inside vcl>的?有谁知道吗?
- 如何断开moden?
- 如何清空动态数组,并将其长度变为刚定义未设置setlength()时的长度?
- 高手救我啊。Sql server 中出现Ole error
- Delphi程序平台移植问题。
- Directive Static, Register, abstract, virtual
- 如何把不规则形状的图形------------从图片剪下复制到另外一张图?(大虾请进)
- 关于操作XML删除子节点的问题
- 如何取得文件里的SA登陆信息?
还算不算多线程,会有什么例外吗?????
///Thread1.pas
unit Thread1;interfaceuses
Dialogs, SysUtils, Classes, StdCtrls;type
TThread1 = class(TThread)
private
Params : string;
SleepSec : integer;
F : TMemo;
protected
procedure Execute; override;
public
constructor Create(P : string; S : integer; Fxx : TMemo);
end; TThreadCom1 = class(TComponent)
private
Thread1 : array of TThread1;
public
constructor Create(AOwner:TComponent);override;
destructor Destroy;override;
procedure Thread1Create(a1:array of string; a2:array of integer; F : TMemo);
procedure Thread1Execute();
end;procedure Register;implementationprocedure Register;
begin
RegisterComponents('Win32', [TThreadCom1]);
end;{ TThreadCom1 }constructor TThreadCom1.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;destructor TThreadCom1.Destroy;
begin
inherited;
end;procedure TThreadCom1.Thread1Execute;
var
i : integer;
begin
for i := 0 to length(Thread1) - 1 do
begin
//Thread1[i].Resume;
end;
end;procedure TThreadCom1.Thread1Create(a1:array of string; a2:array of integer; F : TMemo);
var
i : integer;
begin
setlength(Thread1, 3);
for i := 0 to length(a1) - 1 do
begin
Thread1[i] := TThread1.Create(a1[i], a2[i], F);
Thread1[i].Resume;
end;
end;{ TThread1 }constructor TThread1.Create(P: string; S: integer; Fxx : TMemo);
begin
Params := P;
SleepSec := S;
F := Fxx; FreeonTerminate:=true;//当执行完后是否自动销毁
inherited Create(true);//表示是否挂起,false直接执行execure方法
end;procedure TThread1.Execute;
begin
sleep(SleepSec);
//showmessage(Params);
//showmessage(F.Caption);
F.Lines.Add(Params);
end;end.
////////////////////////////////////////////
//测试procedure TForm1.Button1Click(Sender: TObject);
var
x1 : TThreadCom1;
a1 : array[0..2] of string;
a2 : array[0..2] of integer;
begin
x1 := TThreadCom1.Create(nil);
a1[0] := '中国';
a1[1] := '日本';
a1[2] := '美国';a2[0] := 1000;
a2[1] := 300;
a2[2] := 500;
x1.Thread1Create(a1, a2, Memo1);
x1.Thread1Execute;
end;
private
Params : string;//原来这些变量不会被多个线程共享的......是这样吧
SleepSec : integer;
Params := P;
SleepSec := S;那 Thread1[1] 修改 Params\SleepSec 的值,
会不会影响到 Thread1[0] 的 Params\SleepSec值