线程操作 创建、挂起、激活与终止
unit Unit2;
interface
uses
Classes,SysUtils,Dialogs,Windows;
type
Ithreads = class(TThread)
private
{ Private declarations }
awer:integer;
protected
procedure Execute; override;
procedure Giveanswer;
end;
implementation
{ Important: Methods and properties of objects in VCL or CLX can only be used
in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure Ithreads.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ Ithreads }
uses Unit1;
procedure Ithreads.Giveanswer ;
begin
Form1.Edit1.Text := IntToStr(awer);
end;
procedure Ithreads.Execute;
var
i:integer;
begin
{ Place thread code here }
for i:= 1 to 500000 do
begin
inc(awer,round(abs(sin(sqrt(i)))));
synchronize(Giveanswer);
end;
end;
end.
=============================================
线程的创建、挂起、激活与终止
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
hThread:Thandle;//定义一个句柄
ThreadID:DWord;
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.Button1Click(Sender: TObject);
begin
//创建线程,同时线程函数被调用
hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SuspendThread(hThread); //挂起线程
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ResumeThread(hThread); // 激活线程
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
TerminateThread(hThread,0); // 终止线程
end;
end.
interface
uses
Classes,SysUtils,Dialogs,Windows;
type
Ithreads = class(TThread)
private
{ Private declarations }
awer:integer;
protected
procedure Execute; override;
procedure Giveanswer;
end;
implementation
{ Important: Methods and properties of objects in VCL or CLX can only be used
in a method called using Synchronize, for example,
Synchronize(UpdateCaption);
and UpdateCaption could look like,
procedure Ithreads.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ Ithreads }
uses Unit1;
procedure Ithreads.Giveanswer ;
begin
Form1.Edit1.Text := IntToStr(awer);
end;
procedure Ithreads.Execute;
var
i:integer;
begin
{ Place thread code here }
for i:= 1 to 500000 do
begin
inc(awer,round(abs(sin(sqrt(i)))));
synchronize(Giveanswer);
end;
end;
end.
=============================================
线程的创建、挂起、激活与终止
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
hThread:Thandle;//定义一个句柄
ThreadID:DWord;
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.Button1Click(Sender: TObject);
begin
//创建线程,同时线程函数被调用
hthread:=CreateThread(nil,0,@MyThreadfunc,nil,0,ThreadID);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
SuspendThread(hThread); //挂起线程
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
ResumeThread(hThread); // 激活线程
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
TerminateThread(hThread,0); // 终止线程
end;
end.