写了个多线程实例,主要代码如下:
TMyThread1 = class(TMyThread)
protected
procedure Execute;override;
procedure SetPb;
private
i_ca:Integer;
end;
procedure TMyThread1.Execute;
begin
Synchronize(SetPb);
end;
procedure TMyThread1.SetPb;
var
i:Integer;
i_cata:Integer;
begin
i_cata:=i_ca;
if i_cata=1 then
begin
Form1.pb1.Min:=0;
Form1.pb1.Max:=10000;
Form1.pb1.Position:=0;
for i:=0 to 10000 do
begin
Form1.pb1.StepBy(1);
end;
end else
begin
Form1.pb2.Min:=0;
Form1.pb2.Max:=10000;
Form1.pb2.Position:=0;
for i:=0 to 10000 do
begin
Form1.pb2.StepBy(1);
end;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
m1: TMyThread1;
m2: TMyThread1;
begin
m1:=TMyThread1.Create(True);
m1.i_ca:=1;
m1.FreeOnTerminate := True;
m1.Resume(); m2:=TMyThread1.Create(True);
m2.FreeOnTerminate := True;
m2.i_ca:=2;
m2.Resume();
end;
想要实现的功能是点击按钮,两个主窗口的进度条同时跑,可我得到结果是一个一个依次运行的,为什么?多线程Delphi
TMyThread1 = class(TMyThread)
protected
procedure Execute;override;
procedure SetPb;
private
i_ca:Integer;
end;
procedure TMyThread1.Execute;
begin
Synchronize(SetPb);
end;
procedure TMyThread1.SetPb;
var
i:Integer;
i_cata:Integer;
begin
i_cata:=i_ca;
if i_cata=1 then
begin
Form1.pb1.Min:=0;
Form1.pb1.Max:=10000;
Form1.pb1.Position:=0;
for i:=0 to 10000 do
begin
Form1.pb1.StepBy(1);
end;
end else
begin
Form1.pb2.Min:=0;
Form1.pb2.Max:=10000;
Form1.pb2.Position:=0;
for i:=0 to 10000 do
begin
Form1.pb2.StepBy(1);
end;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
m1: TMyThread1;
m2: TMyThread1;
begin
m1:=TMyThread1.Create(True);
m1.i_ca:=1;
m1.FreeOnTerminate := True;
m1.Resume(); m2:=TMyThread1.Create(True);
m2.FreeOnTerminate := True;
m2.i_ca:=2;
m2.Resume();
end;
想要实现的功能是点击按钮,两个主窗口的进度条同时跑,可我得到结果是一个一个依次运行的,为什么?多线程Delphi
解决方案 »
- 如何在DBgrid里面把其逻辑字段用check控件的形式表示.
- 关于PageControl的标题按钮
- 关于得到mp3、wma、wav等音乐的时间长度
- (500分回报)高手请进,关于postgresql的blob型字段的问题
- 关于日期型的问题!!
- 请问DBLookupComboBox怎么用哪
- 数据库是SQL SERVER,DBGRID怎样可以将如果记录的数量大于100显示红色,小于则为白色?
- VB中的变量类型Long是不是就是Delphi中的Interger?VB中的变量类型Integer是不是就是Delphi中的shortint?
- 怎样拦截数据库操作的异常?
- 作超级连接时的底色问题
- 关于捕获dll中的异常的问题
- 该死的clear 根本不释放内存,怎么才能释放泛型LIST的内存?
procedure TMyThread1.Execute;
begin
Synchronize(SetPb);
end;
这里用了同步,可能是这个原因
http://www.cnblogs.com/del/archive/2009/02/11/1388700.html
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, SPComm, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
btn1: TButton;
pb1: TProgressBar;
pb2: TProgressBar;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations } end;var
Form1: TForm1;implementation{$R *.dfm}
type
TMyThread1 = class(TMyThread)
protected
procedure Execute;override;
procedure SetPb;
private
i_ca:Integer;
end;procedure TMyThread1.Execute;
begin
Synchronize(SetPb);
end;
procedure TForm1.btn1Click(Sender: TObject);
var
m1: TMyThread1;
m2: TMyThread1;
begin
m1:=TMyThread1.Create(True);
m1.i_ca:=1;
m1.FreeOnTerminate := True;
m1.Resume(); m2:=TMyThread1.Create(True);
m2.FreeOnTerminate := True;
m2.i_ca:=2;
m2.Resume();
end;procedure TMyThread1.SetPb;
var
i:Integer;
i_cata:Integer;
begin
i_cata:=i_ca;
if i_cata=1 then
begin
Form1.pb1.Min:=0;
Form1.pb1.Max:=10000;
Form1.pb1.Position:=0;
for i:=0 to 10000 do
begin
Form1.pb1.StepBy(1);
end;
end else
begin
Form1.pb2.Min:=0;
Form1.pb2.Max:=10000;
Form1.pb2.Position:=0;
for i:=0 to 10000 do
begin
Form1.pb2.StepBy(1);
end;
end;
end;