delphi线程代码(delphi 线程)
admin 发布:2022-12-19 09:27 107
本篇文章给大家谈谈delphi线程代码,以及delphi 线程对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、DELPHI怎么实现多线程? .....
- 2、delphi线程怎么编写?
- 3、Delphi 多线程的一个代码如何写
- 4、求DELPHI多线程例程
- 5、如何使用delphi中thread的线程编程
- 6、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站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-09网页代码,网页代码快捷键
- 05-06单页网站的代码(完整的网页代码)[20240506更新]
- 05-06个人主页图片代码(个人主页图片代码怎么弄)[20240506更新]
- 05-06提取微信名片代码(微信名片信息提取)[20240506更新]
- 05-06php后台权限管理代码(php管理员权限)[20240506更新]
- 05-06付费观看代码php(付费观看代码)[20240506更新]
- 05-06在线html执行代码(html怎么运行)[20240506更新]
- 05-06源代码管理资源管理器(资源管理器运行代码)[20240506更新]
- 05-06代码源软件库(程序代码库)[20240506更新]
- 05-06点击弹出密码代码(点击弹出密码代码错误)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接