b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

delphi多线程_delphi三层架构源码_delphi多线程串行执行(7)

电脑杂谈  发布时间:2017-01-11 05:06:40  来源:网络整理

㈢、入口函数的参数

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

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

运行效果图:

//上面演示的代码 unit Unit1;  intece  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 := 0end;  procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;   Shift: TShiftState; X, Y: Integer); var   ID: DWORD; begin   pt := Point(X, Y);   CreateThread(nil0, @MyThreadFun, @pt, 0, ID);   {下面这种写法更好理解, 其实不必, 因为 PPoint 会自动转换为 Pointer 的}   //CreateThread(nil, 0, @MyThreadFun, Pointer(@pt), 0, ID); end;  end.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-25504-7.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...