Delphi中使用TThread类实现多线程
来源:互联网 发布:淘宝退款淘金币退吗 编辑:程序博客网 时间:2024/05/30 13:41
之前写的多线程程序都是用api直接做的,没有用过delphi自带Tthread类,刚才看了下,写了个demo,希望对新手有帮助。。。
窗体单元:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,myThread, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure TThreadFinsh(Sender:TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
t1,t2,t3:TThread;
implementation
{$R *.dfm}
procedure TForm1.TThreadFinsh(Sender:TObject);
begin
ShowMessage('一个线程完毕!');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Button1.Caption='开始1' then
begin
Button1.Caption:='关闭';
t1.Resume;
end
else
begin
Button1.Caption:='开始1';
t1.Suspend;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Button2.Caption='开始2' then
begin
Button2.Caption:='关闭';
t2.Resume;
end
else
begin
Button2.Caption:='开始2';
t2.Suspend;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if Button3.Caption='开始3' then
begin
Button3.Caption:='关闭';
t3.Resume;
end
else
begin
Button3.Caption:='开始3';
t3.Suspend;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
t1:=TmyThread1.Create(Label1,10);
t1.OnTerminate:=TThreadFinsh;
t2:=TmyThread2.Create(Label2,20);
t2.OnTerminate:=TThreadFinsh;
t3:=TmyThread3.Create(Label3,30);
t3.OnTerminate:=TThreadFinsh;
end;
end.
线程单元:
unit myThread;
interface
uses
Classes,Windows,SysUtils,Forms,StdCtrls;
type
TTestThread = class(TThread)
private
FLabel:TLabel;
FSleepDec:Integer;
protected
procedure Execute; override;
public
constructor Create(lbl:TLabel;sleepSec:Integer);
end;
TmyThread1=class(TTestThread) end;
TmyThread2=class(TTestThread) end;
TmyThread3=class(TTestThread) end;
implementation
uses main;
{ TTestThread }
constructor TTestThread.Create(lbl:TLabel;sleepSec:Integer); //参数传递
begin
FLabel:=lbl;
FSleepDec:=sleepSec;
FreeOnTerminate:=True; //让线程终止是触发OnTerminate事件
inherited Create(True);//不立即执行,只有调用resume才开始
end;
procedure TTestThread.Execute;
var
i:Integer;
begin
for i:=0 to 1000 do
begin
if terminated then Break;
FLabel.Caption:=IntToStr(i);
Sleep(FSleepDec);
end;
end;
end.
窗体单元:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,myThread, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure TThreadFinsh(Sender:TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
t1,t2,t3:TThread;
implementation
{$R *.dfm}
procedure TForm1.TThreadFinsh(Sender:TObject);
begin
ShowMessage('一个线程完毕!');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Button1.Caption='开始1' then
begin
Button1.Caption:='关闭';
t1.Resume;
end
else
begin
Button1.Caption:='开始1';
t1.Suspend;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if Button2.Caption='开始2' then
begin
Button2.Caption:='关闭';
t2.Resume;
end
else
begin
Button2.Caption:='开始2';
t2.Suspend;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if Button3.Caption='开始3' then
begin
Button3.Caption:='关闭';
t3.Resume;
end
else
begin
Button3.Caption:='开始3';
t3.Suspend;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
t1:=TmyThread1.Create(Label1,10);
t1.OnTerminate:=TThreadFinsh;
t2:=TmyThread2.Create(Label2,20);
t2.OnTerminate:=TThreadFinsh;
t3:=TmyThread3.Create(Label3,30);
t3.OnTerminate:=TThreadFinsh;
end;
end.
线程单元:
unit myThread;
interface
uses
Classes,Windows,SysUtils,Forms,StdCtrls;
type
TTestThread = class(TThread)
private
FLabel:TLabel;
FSleepDec:Integer;
protected
procedure Execute; override;
public
constructor Create(lbl:TLabel;sleepSec:Integer);
end;
TmyThread1=class(TTestThread) end;
TmyThread2=class(TTestThread) end;
TmyThread3=class(TTestThread) end;
implementation
uses main;
{ TTestThread }
constructor TTestThread.Create(lbl:TLabel;sleepSec:Integer); //参数传递
begin
FLabel:=lbl;
FSleepDec:=sleepSec;
FreeOnTerminate:=True; //让线程终止是触发OnTerminate事件
inherited Create(True);//不立即执行,只有调用resume才开始
end;
procedure TTestThread.Execute;
var
i:Integer;
begin
for i:=0 to 1000 do
begin
if terminated then Break;
FLabel.Caption:=IntToStr(i);
Sleep(FSleepDec);
end;
end;
end.
0 0
- Delphi中使用TThread类实现多线程
- Delphi中线程类TThread 实现多线程编程
- Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……
- delphi多线程TThread详解
- delphi多线程TThread详解
- Delphi的TThread类
- Delphi的TThread类
- Delphi的TThread类
- Delphi的TThread类
- Delphi 关于DLL中使用TThread类或其子类的使用注意事项
- Delphi 实现检测线程类TThread是否结束
- 一个TThread类多线程实例
- 一个TThread类多线程实例
- Delphi使用线程TThread查询数据库
- 线程杂谈 Delphi的TThread类 (1)
- Delphi中的线程类 - TThread详解之一
- Delphi中的线程类 - TThread详解
- Delphi中的线程类 - TThread详解
- 黑马程序员之 ---- 基础语法上(关键字、标识符、进制、变量、数据类型、运算符、语句)
- 数据库 - 数据库概论
- Exynos4412 Android4.4 平台 WiFi 功能移植 第二篇
- C++多重继承
- TCP/IP详解学习笔记--TCP(传输控制协议)
- Delphi中使用TThread类实现多线程
- 非模态对话框的销毁
- cocos2dx 关于拖影(类似dnf传承武器的拖尾效果)的快速实现
- 黑马程序员之 ---- 基础语法下(方法、数组)
- nginx errors
- Archlinux systemd 开机执行rc.local
- 三层——c#版
- 【IOS APP】i聊QQ版
- iOS开发系列之二--音频播放、录音、视频播放、拍照、视频录制