读书人

关于线程的一点小疑点

发布时间: 2013-02-24 17:58:56 作者: rapoo

关于线程的一点小问题
先来代码:
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,即不要声明成类的成员函数,线程的回调函数不允许为类成员。

读书人网 >.NET

热点推荐