delphi 中线程类 及api线程

haochin 2010-06-23 12:24:47
我看了万一老师的博客,里面有长篇专门讲线程的,主要讲的是api方法的多线程。

请问大家,在做多线程时,一般是使用delphi的线程类,还是使用api的线程方法啊?


还有大家能不能帮找一个利用delphi线程类来实现多线程的简单例子。

我想了解,怎么样定义线程,线程里的过程怎么写,怎么执行这个线程,怎么样暂停这个线程,怎么样安全终止这个线程等等。

网上的连接也可以。以前对多线程没有深入的研究,现在没有办法工作需要啊。。。
...全文
139 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinoalex 2010-06-23
  • 打赏
  • 举报
回复
API里 CreateThread 的时候会返回一个句柄. 这个句柄可用来控制.

这个句柄还可以用于GetExitCodeThread来检查线程是否退出(执行完).
SQLDebug_Fan 2010-06-23
  • 打赏
  • 举报
回复
如果不用TThread类,你自己写线程,需要自己处理全局变量IsMultiThread,来告DELPHI目前是使用多线程,否则会引起BorlandMM出错。
Harryfin 2010-06-23
  • 打赏
  • 举报
回复
如果不是特殊需要,建议用TThread
luo_342815 2010-06-23
  • 打赏
  • 举报
回复
我用TThread,因为比较简单。
SQLDebug_Fan 2010-06-23
  • 打赏
  • 举报
回复
推荐用TThread类,因为DELPHI是从这个里面得到是否是有多线程在运行的。
bdmh 2010-06-23
  • 打赏
  • 举报
回复
dinoalex写了线程的基本应用代码,楼主看这个应该够用了
  • 打赏
  • 举报
回复
Delphi的Demo就有多线程例子
dinoalex 2010-06-23
  • 打赏
  • 举报
回复
BTW,也可以根据封装里的ID来进行控制.
dinoalex 2010-06-23
  • 打赏
  • 举报
回复
下面是简单的,放两个LABEL,三个BUTTON

[Code=Delphi(Pascal)]

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TMyThread = class(TThread)
ALabel: TLabel;
protected
procedure Execute; override;
public
Constructor Create(CreateSuspended: Boolean);
end;

TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
AList: TList;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
constructor TMyThread.Create(CreateSuspended: Boolean);
begin
inherited Create(true);
end;

procedure TMyThread.Execute;
var
i: Integer;
begin
FreeOnTerminate := True;
for i := 0 to 100000 do
ALabel.Caption:= inttostr(i);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
mt: TMyThread;
begin
AList.Clear;

mt:= TMyThread.Create(true);
mt.ALabel:= Label1;
mt.Resume;
AList.Add(mt);

mt:= TMyThread.Create(true);
mt.ALabel:= Label2;
mt.Resume;
AList.Add(mt);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
AList:= TList.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
for i:= 0 to AList.Count-1 do
TMyThread(AList.Items[i]).Suspend;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
i: integer;
begin
for i:= 0 to AList.Count-1 do
TMyThread(AList.Items[i]).Resume;
end;

end.
[/Code]
dinoalex 2010-06-23
  • 打赏
  • 举报
回复
都用,API较多. 你可以看VCL里的代码,就知道如何封装的了.

如果你还要DEMO的话,网上很多线程池的,载来看就行了.

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧