首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于线程的一点小疑点

2013-02-24 
关于线程的一点小问题先来代码:procedure Tfrmapi.Button1Click(Sender: TObject)varID: THandlebeginCr

关于线程的一点小问题
先来代码:
procedure Tfrmapi.Button1Click(Sender: TObject);
var
ID: THandle;
begin
  CreateThread(nil, 0,@myfun, nil, 0,ID);
end;

function tfrmapi.MyFun(p: Pointer): Integer; stdcall;
var
i: Integer;
begin
  for i := 0 to 500000 do
  begin
      frmapi.Canvas.Lock;
      frmapi.Canvas.TextOut(10, 10, IntToStr(i));
      frmapi.Canvas.Unlock;
  end;
  Result := 0;
end;

报错地方:CreateThread(nil, 0,@myfun, nil, 0,ID);
[Error] ufrm2api.pas(36): Variable required 线程 CreateThread Variable?required 多 delphi
[解决办法]

unit Unit11;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm11 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form11: TForm11;

implementation

{$R *.dfm}

function MyFun(p: Pointer): Integer; stdcall;
var
i: Integer;
begin
  for i := 0 to 500000 do
  begin
      Form11.Canvas.Lock;
      Form11.Canvas.TextOut(10, 10, IntToStr(i));
      Form11.Canvas.Unlock;
  end;
  Result := 0;
end;

procedure TForm11.btn1Click(Sender: TObject);
var
ID: THandle;
begin
  CreateThread(nil, 0,@myfun, nil, 0,ID);
end;

end.

[解决办法]
tfrmapi.MyFun(p: Pointer): Integer; stdcall;改成MyFun(p: Pointer): Integer; stdcall;,
去掉TFrmAPI,即不要声明成类的成员函数,线程的回调函数不允许为类成员。

热点排行