请问Dephi语言里实现多线程的方法是什么 有专门的多线程函数吗?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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. 有专门的THREAD类,DELPHI有DEMO delphi里有TThread类对线程专门做了封装,你只要覆盖execute方法,就可以了.如果有参数传递你可以重载create和destroy方法,包括同步也有Synchronize方法,如果你的线程操作比较复杂的话,建议你把这个类的源代码看一遍.http://blog.csdn.net/fenger8293我这里做过介绍. DELPHI自带有实现多线程DEMO源码 C:\Program Files\Borland\Delphi6\Demos\Threads 文件>新建>线程对象 假设名字为t1UNIT1里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);beginThreadFunc(nil);end;end. rzedit在什么面板呢, 强制退出程序,触发什么事件? 请问opendialog控件在哪里啊。我D7的 一个超级超级超级的难题 有关一个简单的Delphi计算器 谁有客户管理系统源码 在COM+中共享对象的问题? 关于idftp1的问题,高手请指教!!!!!!1 adodataset可以直接refresh吗? 用InstallShield制作数据库软件得安装程序时,如何在安装的过程中自动建好数据库? 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.