当前位置:首页 > 代码 > 正文

delphi线程代码(delphi 线程)

admin 发布:2022-12-19 09:27 107


本篇文章给大家谈谈delphi线程代码,以及delphi 线程对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

DELPHI怎么实现多线程? .....

多线程其实非常简单,DELPHI有多线程的类,你添加即可使用,但是我喜欢自己调用API,方法如下:

定义一个函数或者过程,这个函数就是线程要执行的内容,然后调用API就可以不断创建线程,每个线程都单独的执行那个函数,执行完毕线程就自动关闭,下面是我程序里面的部分代码:

{下面这个就是线程过程,我的线程传递一个参数,建立的SOCKET}

procedure

ClientThread(var

sock:TSOCKET);

stdcall;

var

……;

begin

……

end;

{下面是主程序建立服务,等待连接,连接后调用线程进行处理的代码}

repeat

iAddrSize

:=

sizeof(client);

sClient

:=

accept(sListen,

@client,

@iAddrSize);

if

sClient=INVALID_SOCKET

then

begin

SocketErrorMsg(sClient,

'accept()

fail');

break;

end;

writeln('Accepted

client:

',inet_ntoa(client.sin_addr),':',ntohs(client.sin_port),'

sock=',sClient);

hThread

:=

CreateThread(nil,

$1000,

@ClientThread,

@sClient,

0,

dwThreadId);

if

hThread=0

then

begin

writeln('CreateThread()

fail:',GetLastError);

break;

end;

CloseHandle(hThread);

until

false;

delphi线程怎么编写?

对线程的概念你还不是很明白。 一个进程都会至少有一个线程。所以只要你随便写啥程序,如果不是你自己特意加多线程或者引用其它的带多线程的库的话,你的程序就是单线程的。 我看你的意思,其实是想写一个程序,在这个程序里面,还可以创建一个其它的线程。这在DELPHI里是可以通过TThread的继承类来实现的。只要你声明一个类,继承自TThread就可以。比如typeTMyThread = class(TThread) procedure Execute; override;//在这个的实现里面写代码即可。要注意线程间资源的共享end;当然你也可以用CreateThread来操作。 在DELPHI本身自带了多线程的DEMO。

Delphi 多线程的一个代码如何写

前几天刚好有个客户叫我用DELPHI帮忙写个线程例子,给你看看

//主窗体

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Memo1: TMemo;

Button2: TButton;

Edit1: TEdit;

Label1: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

//线程列表,和Tlist差不多,多了一些多线程同步处理方法

GvThreadList : TThreadList;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

GvThreadList := TThreadList.Create;

Label1.Caption := '线程数:';

Button1.Caption := '创建';

Button2.Caption := '停止';

end;

procedure TForm1.Button1Click(Sender: TObject);

var

i,ICount : Integer;

MyLIst : TList;

MyRcThread : RcThread;

begin

ICount := StrToInt(edit1.Text);

//这里不用MyList也一样,可以直接用GvThreadList.Add(P),让学习者有个LockList方法

MyList := GvThreadList.LockList;

for i :=0 to ICount-1 do

begin

MyRcThread := RcThread.Create(false,memo1,'线程编号:'+IntTostr(i));

//将所创建的线程添加到列表中,方便管理

MyList.Add(MyRcThread);

end;

GvThreadList.UnlockList;

end;

procedure TForm1.Button2Click(Sender: TObject);

var

i : integer;

MyLIst : TList;

MyRcThread : RcThread;

begin

//多个地方同时访问一个列表时,可以用ThreadList的线程锁方法(临界),避免多线程访问变量导致变量取值出错

MyList := GvThreadList.LockList;

for i := 0 to Mylist.Count -1 do

begin

MyRcThread:=MyList[0];

MyRcThread.Terminate;

Mylist.Delete(0);

end;

MyList.Clear;

//解锁

GvThreadList.UnlockList;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Button2.Click;

GvThreadList.Free;

end;

end.

//线程单元

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

//定义线程,简单的举例如何创建/调用线程,

type

RcThread = class(TThread)

private

procedure RefreshMainForm;

public

MyCount: integer ;

MyThreadTally : string;

Mymemo : Tmemo;

//创建参数:线程是否挂起,MEMO,线程标记

constructor Create(CreateSuspended:Boolean;memo:Tmemo;ThreadTally:String);reintroduce;

destructor Destroy(); override;

protected

procedure Execute(); override;

end;

implementation

uses Unit1;

{ RcThread }

//创建

constructor RcThread.Create(CreateSuspended: Boolean;memo:Tmemo;ThreadTally:String);

begin

MyCount := 0;

Mymemo := memo;

MYThreadTally :=ThreadTally;

inherited Create(CreateSuspended);

end;

//释放

destructor RcThread.Destroy;

begin

MyMemo.Lines.Add(MyThreadTally+'释放');

inherited;

end;

//执行

procedure RcThread.Execute;

begin

while True do

begin

//停止,可以根据自己要判断的条件去判断(if....then break;)

if (self.Terminated = true) then

Free;

//线程每15豪秒执行一次,以免过多占用CPU

sleep(15);

//同步

Synchronize(RefreshMainForm);

end;

end;

procedure RcThread.RefreshMainForm;

begin

//简单举例,往传递的MEMO中写当前线程执行了第几次

Inc(MyCount);

Mymemo.Lines.Add(MyThreadTally+' 执行第'+IntToStr(MyCount)+'次');

Application.ProcessMessages;

end;

end.

求DELPHI多线程例程

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Button2: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

hloopHandle:Thandle ; //线程 句柄

dloopThreadID:DWORD ; //线程 id

function doloop(P:pointer):Longint;stdcall;

implementation

{$R *.dfm}

//启动线程处理

procedure TForm1.Button1Click(Sender: TObject);

begin

hloopHandle := CreateThread(nil,0,@doloop,nil,0,dloopThreadID);

if hloopHandle=0 then

begin

messagebox(Handle,'Didn’t Create a Thread',nil,MB_OK);

abort;

end;

end;

//终止线程

procedure TForm1.Button2Click(Sender: TObject);

begin

if hloopHandle0 then

TerminateThread(hloopHandle,dloopThreadID);

end;

//线程处理函数

function doloop(P:pointer):Longint;stdcall;

var

i:integer;

begin

for i:=0 to 10000 do

begin

form1.Edit1.Text:=inttostr(i);

end;

end;

end.

如何使用delphi中thread的线程编程

首先当然是打开你的delphi 6 ,点取菜单栏中的文件-新建-其它,弹出一个标签窗口,选取new标签,然后找到Thread Object,就是它了,双击它就行了,弹出一个类命名窗口,输入mythread,当然名称可由你自已来定的。这时程序自动创建一个unit,我这里是unit2,现在我们来看unit,代码如下:

unit Unit2;

interface

uses

Classes;

type

mythread = class(TThread)

private

{ Private declarations }

protected

procedure Execute; override;

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 mythread.UpdateCaption;

begin

Form1.Caption := 'Updated in a thread';

end; }

{ mythread }

procedure mythread.Execute;

begin

{ Place thread code here }

end;

end.

其中,你注意找到procedure mythread.execute;,应找到了吧,连我都看到了,这就是你刚才建立的线程了,那么接下来,我们要做的就是加入后台执行的代码,代码要加在那里?不会吧,当然是加在

begin

//这里就是加入程序代码的地方了

end;

如果你要调用unit1上的控件,你可以在unit2上面的uses中加入unit1就行了,记住,在unit1里的implementation后面增加uses unit2,这样你就可在unit1中引用线程了,引用的方法很简单,就是,就是,就是,好啦,不卖关了,就是mythread.Create(false);。OK 这就是delphi中的线程,呵呵。

Delphi 线程问题 详细说明如下

有可能是构造函数中的参数不是CreateSuspended导致线程创建后没有自动执行

关于delphi线程代码和delphi 线程的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/5960.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载