有专门的多线程函数吗?谢谢!
解决方案 »
- 喜欢DELPHI 对DELPHI FOR PHP感兴趣的朋友进来聊聊
- 服务器的文件目录浏览程序~~急
- 如何在Delphi中显示动态的GIF
- clientdataset是否只刷新一条记录呢?
- report builder怎么没有直接打印的?ppReport1.print还会是先预览
- 小弟比较“白菜”,想请教Flatstyle怎么使用?
- 怎么把XLReport加到DELPHI里的?我在线等!
- 有关WORD文件的打开,,,
- 如何在quick report中,打印数值的同时,打印它的大写?
- 这个csdn,搞来搞去,越搞越差,真Tmd
- Delphi数据压缩处理资料(1)
- simpledataset的AutoGenerateValue设为arAutoInc怎么不产生值啊?
Tks,找了个例子,重来没有写过dephi程序,不过有一些编程基础
想照这例子写一个简单的多线程小程序就OK了,谢谢
这个例子行吗?
####################################(*----下面这个程序介绍了我们在使用线程及未使用线程二种情况下,运行该程序的反
应。当点UsedThread按钮时,则建立一个线程,这时我们可以在程序进行计算的同
时,改变窗体的尺寸及移动它。当按下NoUsedThread按钮时,不建立线程,我们会发
现在程序没有计算完之前根本不能做其它任何事情!
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;type
TForm1 = class(TForm)
UsedThread: TBitBtn;
NoUsedThread: TBitBtn;
procedure UsedThreadClick(Sender: TObject);
procedure NoUsedThreadClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}function MyThreadFunc(P:pointer):Longint;stdcall;
var
i:longint;
DC:HDC;
S:string;
begin
DC:=GetDC(Form1.Handle);
for i:=0 to 500000 do begin
S:=Inttostr(i);
Textout(DC,10,10,Pchar(S),length(S));
end;
ReleaseDC(Form1.Handle,DC);
end;
procedure TForm1.UsedThreadClick(Sender: TObject);
var
hThread:Thandle;//定义一个句柄
ThreadID:DWord;
begin
//创建线程,同时线程函数被调用
hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID);
if hThread=0 then
messagebox(Handle,'Didn’tCreateaThread',nil,MB_OK);
end;procedure TForm1.NoUsedThreadClick(Sender: TObject);
begin
MyThreadfunc(nil);
//没有创建线程时,直接调用线程函数
end;
end.
如果有参数传递你可以重载create和destroy方法,包括同步也有Synchronize方法,
如果你的线程操作比较复杂的话,建议你把这个类的源代码看一遍.
http://blog.csdn.net/fenger8293
我这里做过介绍.
假设名字为t1
UNIT1里
use添加UNIT2var
Form1: TForm1;
P1:t1;procedure TForm1.FormCreate(Sender: TObject);
begin
P1:=t1.Create(False);
end;UNIT2里procedure t1.Execute;
begin
FreeOnTerminate:=True;
{你的代码}
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm} function ThreadFunc(P: Pointer): LongInt; stdcall;
var
i: Integer;
DC: HDC;
S: string;
begin
DC := GetDC(Form1.Handle);
SetBkColor(DC, GetSysColor(color_btnface));
for i := 0 to 100000 do
begin
S := IntToStr(i);
TextOut(DC, 10, 10, PChar(S), Length(S));
end;
ReleaseDC(Form1.Handle, DC);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
hThread: THandle;
ThreadID: DWord;
begin
hthread := CreateThread(nil, //Security attribute
0, //Initial Stack
@ThreadFunc, //Starting address of thread
nil, //argument of thread
0, // Create flags
ThreadID); // thread ID
if hthread = 0 then MessageBox(Handle, 'No Thread', nil, MB_OK);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
ThreadFunc(nil);
end;end.