第一范文网 - 专业文章范例文档资料分享平台

delphi线程详细教程简单到复杂

来源:用户分享 时间:2025/5/23 5:20:59 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

hThread := CreateThread(nil, 0, @MyThreadFun, nil, CREATE_SUSPENDED, ID);

Button1.Enabled := False; end;

{唤醒并继续线程}

procedure TForm1.Button2Click(Sender: TObject); begin

ResumeThread(hThread); end;

{挂起线程}

procedure TForm1.Button3Click(Sender: TObject); begin

SuspendThread(hThread); end;

procedure TForm1.FormCreate(Sender: TObject); begin

Timer1.Interval := 100; end;

procedure TForm1.Timer1Timer(Sender: TObject); begin

Text := IntToStr(num); end; end.

㈢、入口函数的参数

function CreateThread( lpThreadAttributes: Pointer; dwStackSize: DWORD;

lpStartAddress: TFNThreadStartRoutine; lpParameter: Pointer; {入口函数的参数} dwCreationFlags: DWORD; var lpThreadId: DWORD ): THandle; stdcall;

线程入口函数的参数是个无类型指针(Pointer), 用它可以指定任何数据; 本例是把鼠标点击窗体的坐标传递给线程的入口函数, 每次点击窗体都会创建一个线程.

运行效果图:

//上面演示的代码 unit Unit1;

interface uses

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

Dialogs; type

TForm1 = class(TForm)

procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); end; var

Form1: TForm1;

implementation

{$R *.dfm} var

pt: TPoint; {这个坐标点将会已指针的方式传递给线程, 它应该是全局的}

function MyThreadFun(p: Pointer): Integer; stdcall; var

i: Integer;

pt2: TPoint; {因为指针参数给的点随时都在变, 需用线程的局部变量存起来} begin

pt2 := PPoint(p)^; {转换} for i := 0 to 1000000 do begin

with Form1.Canvas do begin

Lock;

TextOut(pt2.X, pt2.Y, IntToStr(i)); Unlock; end; end; Result := 0; end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var

ID: DWORD; begin

pt := Point(X, Y);

CreateThread(nil, 0, @MyThreadFun, @pt, 0, ID);

{下面这种写法更好理解, 其实不必, 因为 PPoint 会自动转换为 Pointer 的}

//CreateThread(nil, 0, @MyThreadFun, Pointer(@pt), 0, ID); end; end.

这个例子还有不严谨的地方: 当一个线程 Lock 窗体的 Canvas 时, 其他线程在等待; 线程在等待时, 其中的计数也还在增加. 这也就是说: 现在并没有去处理线程的同步; 同步是多线程中最重要的课题, 快到了.

另外有个小技巧: 线程函数的参数是个 32 位(4个字节)的指针, 仅就本例来讲, 可以让它的 \高16位\和 \低16位\分别携带 X 和 Y; 这样就不需要哪个全局的 pt 变量了.

搜索更多关于: delphi线程详细教程简单到复杂 的文档
delphi线程详细教程简单到复杂.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c3wuac9y79e6ksx798r5h_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top